jQuery: Array von Funktionen sequentiell ausführen (sowohl verzögert als auch nicht verzögert)

Ich bin ziemlich neu in der Verwendung von Promises und kann mich nur schwer mit jQuery-Verzögerungen auseinandersetzen.

Derzeit habe ich eine Reihe von Funktionen, die ich zu einem bestimmten Zeitpunkt ausführe:

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

Das Problem dabei ist, dass einige dieser Funktionen asynchron sind, aber ich muss sie nacheinander ausführen.

Einige der Funktionen in der Warteschlange geben also einen zurückgestellten Wert zurück (z. B. über jQuery.ajax ()), und einige sind nur normale Funktionen. Ich möchte wissen, ob es möglich wäre, sie der Reihe nach auszuführen (Ausführen der nächsten Funktion nur, wenn die vorherige beendet ist).

Ich dachte, vielleicht ist jQuery.wann ist es das, wonach ich suche, aber ich kann nicht genau herausfinden, wie es geht. Ich habe mir nur Folgendes ausgedacht:

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