ホームページ >ウェブフロントエンド >jsチュートリアル >一部の約束が失敗したとしても、すべての約束が完了するまでどのように待つことができますか?

一部の約束が失敗したとしても、すべての約束が完了するまでどのように待つことができますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-03 11:08:39190ブラウズ

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

失敗に関係なく、すべての Promise を待機します

失敗する可能性のあるネットワーク リクエストを行う一連の Promise があるシナリオでは、一部の Promise が失敗したとしても、すべての Promise が完了するまで待ってから続行することを好む場合があります。

組み込みPromise.allSettled メソッドは、簡単な解決策を提供します。

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

Promise.allSettled の導入前は、reflect 関数を使用して同じ結果を達成できました。

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

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

代わりに、リフレクト関数を拡張して、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");
});

これらを利用することでこのテクニックを使用すると、ネットワーク障害を適切に処理し、一部の Promise が成功したかどうかに関係なく、コードが意図したとおりに実行され続けることを保証できます。

以上が一部の約束が失敗したとしても、すべての約束が完了するまでどのように待つことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。