首頁 >web前端 >js教程 >即使沒有明確返回,非同步函數是否始終返回 Promise?

即使沒有明確返回,非同步函數是否始終返回 Promise?

Patricia Arquette
Patricia Arquette原創
2024-12-17 21:48:12467瀏覽

Do Async Functions Always Return Promises, Even Without Explicit Returns?

非同步函數中Promise 的隱式回傳

與非同步函數直接傳回await表達式的值的假設相反,它們實際上總是返回一個承諾。如果不存在明確 return 語句,則要傳回的值將自動包裝在 Promise 中。這適用於所有返回值,包括非承諾。

例如:

async function increment(num) {
  return num + 1;
}

increment(3).then(num => console.log(num)); // Logs 4

在這種情況下,即使返回一個數字,它仍然是封裝在一個承諾中。當透過 then() 方法存取傳回值時,這一點很明顯。

其他情況:

  • 沒有 return 語句的函數也會隱含回傳一個 Promise未定義的值。
  • 涉及await表達式的非同步函數傳回await回傳值的承諾

異常:

當從非同步函數中明確傳回Promise 時,會發生此規則的異常。在這種情況下,promise 不會被重新包裝。

範例:

async function increment(num) {
  return new Promise(resolve => resolve(num + 1));
}

increment(3).then(num => console.log(num)); // Logs 4

結論:

而這種行為可能會偏離傳統的Java return 語句,它與ES6 中生成器的概念一致,而ES6 中的生成器並未傳回準確的值作為回傳語句。

以上是即使沒有明確返回,非同步函數是否始終返回 Promise?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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