Was ist der Unterschied zwischen Deferred und Promise?
Versprechen
Ein Versprechen ist ein Objekt, das von einer asynchronen Funktion zurückgegeben wird. Wenn Sie eine solche Funktion selbst schreiben möchten, müssen Sie eine verzögerte Funktion verwenden.
var promise = $.ajax({ url: "/myServerScript" }); promise.done(mySuccessFunction); promise.fail(myErrorFunction); var promise = $.ajax({ url: "/myServerScript" }); promise.then(mySuccessFunction,myErrorFunction);
Die Vorteile der Verwendung von Promises sind wie folgt:
Sie können die Funktionen done() und fail() mehrmals aufrufen und unterschiedliche Rückruffunktionen verwenden. Möglicherweise haben Sie eine Rückruffunktion zum Stoppen der Animation, eine zum Initiieren einer neuen AJAX-Anfrage und eine zum Anzeigen der empfangenen Daten für den Benutzer.
var promise = $.ajax({ url: "/myServerScript" }); promise.done(myStopAnimationFunction); promise.done(myOtherAjaxFunction); promise.done(myShowInfoFunction); promise.fail(myErrorFunction);
Auch nachdem der AJAX-Aufruf abgeschlossen ist, können Sie die Funktionen done() und fail() noch aufrufen und die Callback-Funktion kann sofort ausgeführt werden. Es gibt keine Variablenverwechslung zwischen verschiedenen Zuständen. Wenn ein AJAX-Aufruf endet, behält er den Status „Erfolg“ oder „Fehler“ bei und dieser Status ändert sich nicht.
Sie können Versprechen zusammenführen. Manchmal müssen Sie zwei AJAX-Anfragen gleichzeitig stellen und möchten eine Funktion aufrufen, wenn beide AJAX-Anfragen erfolgreich sind. Um diese Aufgabe zu erfüllen, müssen Sie eine neue $.when()-Funktion verwenden:
var promise1 = $.ajax("/myServerScript1"); var promise2 = $.ajax("/myServerScript2"); $.when(promise1, promise2).done(function(xhrObject1, xhrObject2) { // 处理两个XHR对象 });
aufgeschoben
Einfach ausgedrückt ist das verzögerte Objekt die Callback-Funktionslösung von jQuery. Im Englischen bedeutet defer „Verzögerung“. Die Bedeutung eines verzögerten Objekts besteht also darin, die Ausführung bis zu einem bestimmten Punkt in der Zukunft zu „verzögern“.
Ein verzögertes Objekt kann das Gleiche tun wie ein Promise-Objekt, verfügt jedoch über zwei Funktionen zum Auslösen der Funktionen done() und fail().
Ein zurückgestelltes Objekt verfügt über die Funktion „resolve()“, um ein erfolgreiches Ergebnis zu verarbeiten und Funktionen im Zusammenhang mit done() auszuführen. Die Funktion „reject()“ wird verwendet, um fehlgeschlagene Ergebnisse zu verarbeiten und Funktionen im Zusammenhang mit fail() auszuführen.
Sie können Parameter sowohl für die Funktionen „resolve()“ als auch „reject()“ bereitstellen, und dann werden beide an die Rückruffunktionen übergeben, die sich auf done() und fail() beziehen.
Zusammenfassung
Der Ajax von jQuery besteht darin, ein Versprechensobjekt zurückzugeben, das die Methoden done() und fail() enthält.