Versprechensverkettung und Wertzugriff verstehen
Bei der Arbeit mit Versprechen in JavaScript-Frameworks wie Angular stoßen Sie möglicherweise auf asynchrone Funktionen, die Versprechen zurückgeben. wie das Beispiel aus der $q-Dokumentation von Angular:
promiseB = promiseA.then(function(result) { return result + 1; });
Während in der Dokumentation steht, dass „promiseB wird sofort aufgelöst, nachdem PromiseA aufgelöst wurde ... wobei das Ergebnis von PromiseA um 1 erhöht wird. Es ist möglicherweise nicht klar, wie das funktioniert.
Der Schlüssel zum Verständnis liegt darin, zu erkennen, dass die then-Funktion in PromiseA funktioniert gibt ein neues Versprechen zurück, PromiseB. Dieses neue Versprechen wird unmittelbar nach der Auflösung von VersprechenA aufgelöst und sein Wert wird durch den Rückgabewert der Erfolgsfunktion in VersprechenA bestimmt.
In diesem Fall gibt die Erfolgsfunktion „Ergebnis 1“ zurück, sodass VersprechenB mit aufgelöst wird der um 1 erhöhte Ergebniswert. Um auf diesen Wert zuzugreifen, können Sie daher Folgendes tun:
promiseB.then(function(result) { // Here you can use the result of promiseB });
In modernen JavaScript-Versionen (ES7 und höher) können Sie die verwenden async/await-Syntax, um die gleiche Funktionalität zu erreichen:
async function doSomething() { let result = await functionThatReturnsPromiseA(); return result + 1; }
In diesem Fall entpackt „wait“ das Ergebnis von PromiseA und weist es direkt der Ergebnisvariablen zu, sodass Sie mit dem Wert arbeiten können, ohne auf das Promise-Objekt zuzugreifen .
Beachten Sie, dass async/await nur innerhalb von asynchronen Funktionen verwendet werden kann, die immer Versprechen zurückgeben. Wenn Sie also auf den Rückgabewert einer asynchronen Funktion zugreifen möchten, müssen Sie „await“ in einem anderen asynchronen Kontext verwenden.
Das obige ist der detaillierte Inhalt vonWie greife ich in JavaScript auf den aufgelösten Wert einer Versprechenskette zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!