Verkettete Versprechen und der Wert von Undefiniertem
In diesem Fall gibt das verkettete .then() keinen Wert zurück und erstellt keinen neuen Versprechen. Wenn das in doStuff() erstellte äußere Versprechen mit dem Wert n * 10 aufgelöst wird, wird das nachfolgende .then() aufgerufen und das Ergebnis des darin enthaltenen Ausdrucks (Protokollierungsanweisungen und eine mögliche Rückgabeanweisung) in der Konsole protokolliert. Da jedoch von diesem verketteten .then() kein tatsächlicher Wert zurückgegeben wird, erhält das nachfolgende .then(), das in doStuff damit verkettet ist, nichts – daher der undefinierte Wert.
Lösung: Werte oder Versprechen zurückgeben from .then()
Um dieses Problem zu beheben, stellen Sie sicher, dass der .then()-Rückruf einen Wert oder einen anderen Funktionsaufruf zurückgibt, der einen Wert oder ein Versprechen zurückgibt. In diesem modifizierten Beispiel:
<code class="js">const doStuff = (n /* `n` is expected to be a positive number */) => { return new Promise((resolve, reject) => { setTimeout(() => { resolve(n * 10); }, Math.floor(Math.random() * 1000)); }) .then((result) => { if (result > 100) { console.log(`${result} is greater than 100`); } else { console.log(`${result} is not greater than 100`); } // Return `result` to pass it to the next `.then()` return result; }); }; doStuff(9) .then((data) => { console.log("data is: " + data); });</code>
Jetzt empfängt die verkettete .then()-Anweisung den von der vorherigen .then()-Anweisung zurückgegebenen Wert, wodurch das undefinierte Problem behoben wird. Die Ausgabe zeigt den vom vorherigen .then() übergebenen Wert an.
Das obige ist der detaillierte Inhalt vonWas verursacht undefinierte Werte in verketteten Versprechen und wie kann man sie beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!