jQuery: ejecuta una matriz de funciones secuencialmente (tanto diferidas como no diferidas)

Soy bastante nuevo en el uso de Promesas y me resulta difícil entender cómo se difieren los jQuery.

Lo que tengo actualmente es una serie de funciones que ejecuto en un punto determinado:

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

El problema con esto es que algunas de esas funciones son asíncronas, pero necesito que se ejecuten una tras otra.

Entonces, algunas de las funciones en la cola devuelven un diferido (por ejemplo, a través de jQuery.ajax ()) y algunas son funciones normales. Me gustaría saber si sería posible ejecutarlos en orden + secuencialmente (ejecutando la siguiente función solo cuando la anterior haya terminado).

Pensé que tal vez jQuery. Cuando sería lo que estaba buscando, pero no puedo entender cómo hacerlo exactamente, solo se me ocurrió esto:

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

Respuestas a la pregunta(1)

Su respuesta a la pregunta