Kurz gesagt, möchte ich einen allgemeinen Callback haben, der immer im Falle eines erfolgreichen Ajax-Aufrufs ausgelöst wird, gefolgt von einer separaten Callback-Funktion, abhängig davon, wo die Methode aufgerufen wird.
Das scheint zu funktionieren. Meine Frage ist, ob dies eine korrekte Verwendung des Versprechensobjekts ist und ob es sicher ist anzunehmen, dass mehrere Versprechensrückrufe desselben Typs immer sequentiell gestapelt werden?
%Vor%Es ist eine korrekte und dokumentierte Verwendung des zurückgestellten Objekts in jQuery. Die Dokumentation gibt eindeutig an :
Rückrufe werden in der Reihenfolge ausgeführt, in der sie hinzugefügt wurden.
Es funktioniert anders in anderen Versprechungen Bibliotheken und in der Regel .then
wird sowieso .done
vorgezogen (später in der Antwort erläutert). Aber vorausgesetzt, Sie verwenden jQuery verspricht, wird es in Ordnung sequentiell, wenn sie synchron sind.
Also ist die direkte Antwort auf Ihre Frage ja.
Sie können dies jedoch auch mit asynchronem Code tun und ihn besser mit .then
verknüpfen:
Grundsätzlich fügt done
einen Handler hinzu und gibt dasselbe Versprechen zurück und .then
gibt ein neues Versprechen zurück, das vom letzten verkettet ist. Im Allgemeinen würde ich nur .done
benutzen, um Ketten zu beenden und wenn du den Rückgabewert behalten willst (das Argument von function(){
)