非同步函數中的隱式 Promise
在 JavaScript 中,非同步函數是可以非同步等待 Promise 完成並傳回其值的函數。然而,一個常見的誤解是非同步函數隱式傳回其回傳值的承諾。
理解回傳值
雖然非同步函數可能隱含回傳一個承諾,這並不完全準確。非同步函數的回傳值可以是以下兩種之一:
非承諾值範例:
async function increment(num) { return num + 1; } increment(3).then(num => console.log(num)); // Logs: 4
這裡,我們從非同步函數傳回一個數字。然而,輸出是透過 .then() 檢索的,表示它是已解析為值 4 的 Promise。
明確 Promises:
如果我們從非同步函數明確傳回一個 Promise,我們收到該值的 Promise,而不是某個值的 Promise
async function increment(num) { return Promise.resolve(num + 1); } increment(3).then(num => console.log(num)); // Logs: 4
例外:
結論
JavaScript 中的非同步函數隱式包裝非 Promise 回傳值在一個承諾中。但是,如果傳回值已經是一個 Promise,則保持不變。這種行為與傳統的 return 語句不同,但與 ES6 中生成器的基本原理一致。
以上是JavaScript 中的非同步函數總是會回傳 Promise 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!