Erstens: Sie können nicht verwenden, $.Promise();
weil es nicht existiert.
Ein zurückgestelltes Objekt ist ein Objekt, das ein Versprechen erstellen und seinen Status in resolved
oder ändern kann rejected
. Zurückgestellte werden normalerweise verwendet, wenn Sie Ihre eigene Funktion schreiben und dem aufrufenden Code ein Versprechen geben möchten. Sie sind der Produzent des Wertes.
Ein Versprechen ist, wie der Name schon sagt, ein Versprechen über den zukünftigen Wert. Sie können Rückrufe anhängen, um diesen Wert zu erhalten. Das Versprechen wurde Ihnen "gegeben" und Sie sind der Empfänger des zukünftigen Wertes.
Sie können den Status des Versprechens nicht ändern. Nur der Code, der das Versprechen erstellt hat, kann seinen Status ändern.
Beispiele:
1. ( produzieren ) Sie verwenden zurückgestellte Objekte, wenn Sie Versprechen für Ihre eigenen Funktionen unterstützen möchten. Sie berechnen einen Wert und möchten steuern, wann das Versprechen gelöst wird.
function callMe() {
var d = new $.Deferred();
setTimeout(function() {
d.resolve('some_value_compute_asynchronously');
}, 1000);
return d.promise();
}
callMe().done(function(value) {
alert(value);
});
2. ( vorwärts ) Wenn Sie eine Funktion aufrufen, die selbst ein Versprechen zurückgibt, müssen Sie kein eigenes zurückgestelltes Objekt erstellen. Sie können dieses Versprechen einfach zurückgeben. In diesem Fall schafft die Funktion keinen Wert, sondern leitet ihn weiter (Art):
function fetchData() {
return $.ajax({...});
}
fetchData().done(function(response) {
});
3. ( empfangen ) Manchmal möchten Sie keine Versprechen / Werte erstellen oder weitergeben, Sie möchten sie direkt verwenden, dh Sie sind der Empfänger einiger Informationen:
$('#my_element').fadeOut().promise().done(function() {
});
Natürlich können alle diese Anwendungsfälle auch gemischt werden. Ihre Funktion kann der Wertempfänger sein (z. B. von einem Ajax-Aufruf) und darauf basierend einen anderen Wert berechnen (erzeugen).
Verwandte Fragen: