首頁 > web前端 > js教程 > Promise.all 如何改善並發等待執行和錯誤處理?

Promise.all 如何改善並發等待執行和錯誤處理?

Mary-Kate Olsen
發布: 2024-12-11 16:15:11
原創
774 人瀏覽過

How Can Promise.all Improve Concurrent Await Execution and Error Handling?

並發Await執行:克服順序執行

問題:

在傳統非同步程式設計中,多個a wait操作並發執行因順序受阻

原因:

相關程式碼等待第一個等待操作完成,然後再啟動第二個。

建議的解決方案:

在單獨等待 Promise 之前獲取 Promise 的最初建議確實允許並行執行。但是,它引入了錯誤處理和潛在的未處理拒絕錯誤的問題。

建議方法:

我們建議使用Promise.all,而不是建議的解決方案:

const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
登入後複製

的好處:Promise .all:

  • 啟動所有提供的Promise 的平行執行。
  • 正確處理拒絕,避免未處理的拒絕錯誤。
  • 提供更簡潔和與建議的語法相比一致

示例:

考慮以下示例,該示例演示了計時和錯誤處理方面的差異:

const getValue1Async = () => {
  return new Promise(resolve => {
    setTimeout(resolve, 500, "value1");
  });
};

const getValue2Async = () => {
  return new Promise((resolve, reject) => {
    setTimeout(reject, 100, "error");
  });
};

// Sequential execution with proposed solution
(async () => {
  try {
    console.time("sequential");
    const p1 = getValue1Async();
    const p2 = getValue2Async();
    const value1 = await p1;
    const value2 = await p2;
  } catch (e) {
    console.error(e);
  }
  console.timeEnd("sequential");
})();

// Concurrent execution with Promise.all
setTimeout(async () => {
  try {
    console.time("concurrent");
    const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
  } catch (e) {
    console.timeEnd("concurrent", e);
  }
}, 1000);
登入後複製

在順序執行範例中,程式碼等待500毫秒以完成第一個操作,然後啟動第二個操作。相比之下,並發執行範例在 100ms 後立即處理第二個操作的失敗。

以上是Promise.all 如何改善並發等待執行和錯誤處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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