首頁 > web前端 > js教程 > 主體

為什麼 JavaScript 中的非同步函數會回傳 Promise 而不是值?

Barbara Streisand
發布: 2024-10-18 10:47:03
原創
431 人瀏覽過

Why Do Async Functions in JavaScript Return a Promise and Not the Value?

非同步函數傳回 Promise,而不是值:揭示斷開連接

JavaScript 中的非同步程式設計帶來了程式碼執行的革命。特別是,非同步函數已成為編寫不會阻塞主事件循環的程式碼的流行方法。然而,處理非同步函數時遇到的一個常見陷阱是它們不會直接傳回最終值,而是傳回 Promise。這可能會令人困惑,特別是對於熟悉傳統同步程式設計的開發人員來說。

要理解非同步函數為何以這種方式運行,掌握 JavaScript 事件循環的概念非常重要。事件循環是一個單執行緒系統,用於管理瀏覽器或 Node.js 環境中的所有任務和回呼。當呼叫 async 函數時,它會立即傳回一個 Promise。 Promise 代表非同步任務的最終結果。然而,函數本身並不等待任務完成才傳回 Promise。這允許後續程式碼繼續執行而不會被阻塞。

考慮以下程式碼:

async function fetchData() {
  const data = await fetch('https://example.com/data.json');
  return data;
}

fetchData().then((data) => {
  console.log(data);
});
登入後複製

在此範例中, fetchData 函數傳回一個代表 fetch 操作的最終結果的 Promise 。但是,函數本身不會等待獲取完成才傳回 Promise。因此,在 Promise 解決之前,console.log(data) 語句不會執行。

要存取非同步函數的最終值,您需要使用 .then() 或 wait 方法。 .then() 方法附加一個回呼函數,該函數將在 Promise 解析時執行。在上面的範例中,.then() 方法用於列印 fetchData 函數傳回的資料。

或者,您可以在另一個非同步函數中使用 wait 關鍵字來等待 Promise 解析。這只能在非同步函數中實現,如下列程式碼所示:

async function callFetchData() {
  const data = await fetchData();
  console.log(data);
}

callFetchData();
登入後複製

在此範例中,callFetchData 函數使用await 關鍵字等待 fetchData 函數在列印資料之前解析。

理解非同步函數的回傳值和它所代表的 Promise 之間的差異對於編寫高效且健壯的非同步程式碼至關重要。透過利用 .then() 方法或 wait 關鍵字,您可以存取非同步函數的最終值並避免與 Promises 相關的常見陷阱。

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

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