問題:
従来の非同期プログラミングでは、複数の待機操作の同時実行シーケンシャルのため妨げられています処理中です。
原因:
問題のコードは、最初の待機操作が完了するまで待機してから、2 番目の待機操作を開始します。
提案された解決策:
Promise を個別に待つ前に取得するという最初の提案では、並列処理が可能です実行。ただし、エラー処理と潜在的な未処理の拒否エラーに関する問題が発生します。
推奨アプローチ:
提案されたソリューションの代わりに、Promise.all:
const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
の利点Promise.all:
例:
タイミングとエラー処理の違いを示す次の例を考えてみましょう。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);
以上がPromise.all は Await の同時実行とエラー処理をどのように改善できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。