鍊式Promise 和未定義的值
在這種情況下,鍊式.then() 不會傳回任何值或建立新值承諾。當 doStuff() 中建立的外部 Promise 解析為 n * 10 的值時,將呼叫後續的 .then(),並將其中表達式的結果(記錄語句和潛在的 return 語句)記錄到控制台。然而,由於這個連結的 .then() 沒有傳回實際值,因此 doStuff 中連結到它的後續 .then() 不會收到任何內容,因此是未定義的值。
解決方案:回傳值或承諾來自.then()
要解決此問題,請確保.then() 回呼回傳一個值或另一個回傳值或Promise 的函數呼叫。在這個修改後的範例中:
<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>
現在,連結的 .then() 接收從前一個 .then() 傳回的值,消除了未定義的問題。輸出將顯示從先前的 .then().
傳遞的值以上是是什麼導致鍊式 Promise 中的值未定義以及如何修復它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!