首頁 > web前端 > js教程 > JavaScript 中的非同步函數總是會回傳 Promise 嗎?

JavaScript 中的非同步函數總是會回傳 Promise 嗎?

Susan Sarandon
發布: 2024-12-22 09:54:37
原創
788 人瀏覽過

Do Async Functions in JavaScript Always Return Promises?

非同步函數中的隱式 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
登入後複製

例外:

  • 空非同步函數:即使非同步函數沒有明確return 語句,它仍然會傳回一個Promise undefined.
  • 非同步函數中的等待:在非同步函數中使用等待不會影響該函數的類型傳回值。如果傳回值不是 Promise,它仍然會包裝在 Promise 中。

結論

JavaScript 中的非同步函數隱式包裝非 Promise 回傳值在一個承諾中。但是,如果傳回值已經是一個 Promise,則保持不變。這種行為與傳統的 return 語句不同,但與 ES6 中生成器的基本原理一致。

以上是JavaScript 中的非同步函數總是會回傳 Promise 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板