首頁 >web前端 >js教程 >非同步函數的傳回值是什麼以及它們與 Promise 有何關係?

非同步函數的傳回值是什麼以及它們與 Promise 有何關係?

DDD
DDD原創
2024-10-18 10:35:29556瀏覽

What Are the Return Values of Async Functions and How Do They Relate to Promises?

非同步函數:了解傳回值和 Promise

雖然非同步函數允許您以同步風格編寫程式碼,但它們本質上傳回 Promise。這可能會導致程式碼傳回值的混亂。

Promises:快速概述

Promises 是表示非同步操作最終完成或失敗的物件。它們提供了兩個關鍵方法:

  • then(resolve,reject):當操作成功(resolve)或偵測到錯誤(reject)時處理操作結果。
  • catch( reject):非同步處理錯誤。

非同步函數和 Promise

非同步函數總是會傳回一個 Promise,即使您沒有明確使用 wait 關鍵字。這個承諾代表了非同步操作的結果。如果函數拋出錯誤,則 Promise 將拒絕該錯誤。

用法:

使用回調函數的Promise:

<code class="javascript">const myAsyncFunction = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('Asynchronous value');
    }, 1000);
  });
};

myAsyncFunction()
  .then(result => {
    console.log(`Callback Result: ${result}`);
  })
  .catch(error => {
    console.log(`Error: ${error}`);
  });</code>

<code class="javascript">async function myAsyncFunction() {
  const result = await new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('Asynchronous value');
    }, 1000);
  });
  return result;
}

myAsyncFunction()
  .then(result => {
    console.log(`Await Result: ${result}`);
  })
  .catch(error => {
    console.log(`Error: ${error}`);
  });</code>
帶有Async/Await的Promise:

在這些範例中,myAsyncFunction 傳回一個Promise,該Promise 在1 秒延遲後解析為值「非同步值」 。 then 和 catch 方法分別處理已解決或已拒絕狀態。

返回Promise

<code class="javascript">const myAsyncFunction = () => {
  return new Promise(...);
};</code>

如果您想要返回Promise 本身而不做任何修改,您可以簡單地write:

傳回修改後的值

<code class="javascript">async function myAsyncFunction() {
  const result = await new Promise(...);
  return result.toUpperCase();
}</code>

要從非同步函數傳回修改後的值,您需要在then 方法中處理Promise 結果並傳回修改後的值。例如:

此函數傳回一個使用結果的大寫版本解析的 Promise。

以上是非同步函數的傳回值是什麼以及它們與 Promise 有何關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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