首頁 >web前端 >js教程 >是什麼導致鍊式 Promise 中的值未定義以及如何修復它們?

是什麼導致鍊式 Promise 中的值未定義以及如何修復它們?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-19 22:19:02739瀏覽

What Causes Undefined Values in Chained Promises and How to Fix Them?

鍊式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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn