jQuery: executa uma matriz de funções sequencialmente (adiadas e não adiadas)

Eu sou bastante novo no uso do Promises e tenho dificuldade em entender minha experiência com os adiados do jQuery.

O que tenho atualmente é uma matriz de funções que executo em um determinado ponto:

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

O problema é que algumas dessas funções são assíncronas, mas eu preciso que elas sejam executadas uma após a outra.

Portanto, algumas das funções na fila retornam um adiado (por exemplo, via jQuery.ajax ()) e algumas são apenas funções normais. Gostaria de saber se seria possível executá-los em ordem + sequencialmente (executando a próxima função somente quando a anterior tiver terminado).

Eu pensei que talvez jQuery.when seria o que eu estou procurando, mas não consigo descobrir exatamente como, eu vim apenas com isso:

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

questionAnswers(1)

yourAnswerToTheQuestion