複数の非同期操作を同時にトリガーするには、Promise を取得するパターンの使用を避けてください。そして順番に待ちます。代わりに、Promise.all 関数を利用します。
const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
このアプローチでは、両方の非同期操作を同時に開始し、結果を配列で提供します。
提供されるソリューションは操作を並行して実行しますが、最初の操作が完了するのを待ってから 2 番目の操作を待ちます。これにより並列実行が可能になりますが、拒否された Promise の処理に問題が発生します。
最初の Promise の完了に時間がかかり、2 番目の Promise が失敗した場合、Promise.all は即座に失敗し、最初の Promise が拒否されなくなります。これにより、処理できない拒否エラーが発生する可能性があります。
現在、並列待機に指定された await 構文はないため、Promise.all を使用する代替手段があります。 await.all に関する議論が浮上しており、将来の機能拡張の可能性が示されています。
次の例を考えてみましょう。ここで、getValue1Async は解決するのに 500 ミリ秒かかり、getValue2Async は拒否するのに 100 ミリ秒かかります。
順次実行:
async () => { try { const value1 = await getValue1Async(); const value2 = await getValue2Async(); } catch (e) { console.error(e); } };
との同時実行Promise.all:
async () => { try { const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]); } catch (e) { console.timeEnd("Promise.all", e); } };
Output:
結論:
Promise の使用.all は、非同期操作の並列実行を効果的に有効にし、拒否された操作の適切な処理を保証します。約束します。
以上がPromise.all はどのようにして同時非同期操作の処理を改善し、未処理の拒否を回避できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。