首頁 >web前端 >js教程 >即使有些承諾失敗,我如何等待所有承諾都解決?

即使有些承諾失敗,我如何等待所有承諾都解決?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-03 11:08:39192瀏覽

How Can I Wait for All Promises to Settle, Even if Some Fail?

等待所有Promise,無論失敗

在您有一系列Promise 發出可能會遇到失敗的網絡請求的情況下,您可能請求的情況下,您可能請求更願意等待所有承諾完成後再繼續,即使有些失敗。

內建Promise.allSettled 方法提供了一個簡單的解決方案:

Promise.allSettled([promise]).then(([result]) => {
  // Reached regardless of outcome
  // {status: "fulfilled", value: 33}
});

在引入Promise.allSettled 之前,您可以使用反射函數來實現相同的結果:

const reflect = (p) => p.then(
  (v) => ({ v, status: "fulfilled" }),
  (e) => ({ e, status: "rejected" })
);

reflect(promise).then((v) => {
  console.log(v.status);
});

或者,擴展Reflect 函數以處理一系列Promise:

function reflect(promises) {
  return Promise.all(promises.map((p) => {
    return p.then((v) => ({ v: v, status: "fulfilled" }),
                   (e) => ({ e: e, status: "rejected" }));
  }));
}

reflect(promises).then((results) => {
  var success = results.filter((x) => x.status === "fulfilled");
});

利用這些技術,您可以優雅地處理網路故障並確保您的程式碼繼續按預期執行,無論某些承諾是否成功。

以上是即使有些承諾失敗,我如何等待所有承諾都解決?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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