jQuery: выполнять массив функций последовательно (как отложенные, так и не отложенные)

Я довольно новичок в использовании Promises, и мне тяжело оборачиваться вокруг отложенных jQuery.

В настоящее время у меня есть массив функций, которые я выполняю в определенный момент:

while (queue.length) {
    (queue.shift())();   
}

Проблема в том, что некоторые из этих функций являются асинхронными, но мне нужно, чтобы они выполнялись одна за другой.

Таким образом, некоторые функции в очереди возвращают отложенные (например, через jQuery.ajax ()), а некоторые являются просто обычными функциями. Я хотел бы знать, как можно было бы выполнить их в порядке + последовательно (выполнение следующей функции только после завершения предыдущей).

Я подумал, что, возможно, jQuery.when будет тем, что я ищу, но я не могу понять, как именно это сделать, я придумал только это:

var deferred = jQuery.Deferred();
    while (queue.length > 0) {
       deferred.done().then(queue.shift());
    }