Promise.all()

DDD
リリース: 2025-01-21 12:34:16
オリジナル
547 人が閲覧しました

Promise.all()

JavaScript についての深い理解Promise.all()

Promise.all() は、複数の非同期操作を同時に処理するための JavaScript の強力なメソッドです。複数の Promise を含む反復可能なオブジェクト (通常は配列) を受け取り、単一の Promise を返します。この単一の Promise は、すべての入力 Promise が正常に解決された場合にのみ解決されます。いずれかの Promise が拒否された場合、その単一の Promise は直ちに拒否されます。このガイドでは、Promise.all() の機能、構文、動作、および実践的な例について説明します。

文法

Promise.all() の構文は簡単です:

<code class="language-javascript">Promise.all(iterable);</code>
ログイン後にコピー
  • iterable: Promise または値を含む配列またはその他の反復可能なオブジェクト。非 Promise 値は解決された Promise として扱われます。

戻り値

このメソッドは、次の動作を持つ Promise を返します:

  • iterable が空の場合、空の配列としてすぐに解析されます。
  • 反復可能内のすべての Promise が成功した場合は、元の順序を維持したまま、成功した値を含む配列に解決されます。
  • いずれかの Promise が拒否された場合、それは直ちに拒否され、最初に拒否された Promise の理由が返され、他のすべての Promise の結果は無視されます。

成功と失敗

  1. 成功: すべての Promise が正常に解決されると、Promise.all() は入力 Promise と同じ順序で結果の配列を返します。
  2. 失敗: いずれかの Promise が拒否された場合、Promise.all() は直ちに拒否され、Promise の拒否理由が返されます。

実践例

例 1: 基本的な使用法

この例では、異なるタイムアウト後に解決される 3 つの Promise を作成します。

<code class="language-javascript">const promise1 = new Promise((resolve) => setTimeout(() => resolve('One'), 1000));
const promise2 = new Promise((resolve) => setTimeout(() => resolve('Two'), 2000));
const promise3 = new Promise((resolve) => setTimeout(() => resolve('Three'), 3000));

Promise.all([promise1, promise2, promise3])
  .then(values => console.log(values)) // 输出: ['One', 'Two', 'Three']
  .catch(error => console.error(error));</code>
ログイン後にコピー

ここで、Promise.all() は 3 つの Promise がすべて解決されるのを待ち、その結果を配列としてコンソールに記録します。

例 2: 混合値の処理

解決された値と Promise を混合することもできます:

<code class="language-javascript">const p1 = Promise.resolve(42);
const p2 = Promise.resolve('Hello');
const p3 = new Promise((resolve) => setTimeout(() => resolve('World'), 1000));

Promise.all([p1, p2, p3])
  .then(values => console.log(values)) // 输出: [42, 'Hello', 'World']
  .catch(error => console.error(error));</code>
ログイン後にコピー

この場合、p1 と p2 はすぐに解決され、p3 は 1 秒後に解決されます。

例 3: 障害の処理

Promise の 1 つが拒否された場合、Promise.all() は直ちに拒否されます:

<code class="language-javascript">const p1 = Promise.resolve(42);
const p2 = Promise.reject(new Error('Failed!'));
const p3 = new Promise((resolve) => setTimeout(() => resolve('This will not run'), 1000));

Promise.all([p1, p2, p3])
  .then(values => console.log(values))
  .catch(error => console.error(error.message)); // 输出: 'Failed!'</code>
ログイン後にコピー

ここでは、p2 が拒否されたため、操作全体が失敗し、エラー メッセージが記録されます。

Promise.all()

の適用シナリオ
  • 複数のリソースを取得: 複数の API から同時にデータを取得し、すべての応答を処理する前に待機する必要がある場合。
  • 並列処理: 複数の独立したタスクが同時に実行され、その結果を結合する必要がある場合。
  • バッチ操作: 各操作を個別に完了できるバッチ更新または計算を実行する場合。

結論

Promise.all() は、JavaScript で複数の非同期操作を管理するために不可欠なツールです。これにより、開発者は複数の Promise が解決されるのを待ってから他のロジックを続行できるようになり、コードが簡素化されます。ただし、1 つの Promise が失敗すると操作全体が失敗するため、失敗を正しく処理することが重要です。 Promise.all() を効果的に使用する方法を理解すると、よりクリーンで効率的な非同期コードを作成できるようになります。

参考文献: [1] https://www.php.cn/link/ebd58b8a3f1d72f4206201da62fb1204 [2] https://www.php.cn/link/9181a74736d3b86345dadbc90e29390e [3] https://www.php.cn/link/2a3e953a5e3d81e67945bce5519f84c8 [4]https://www.php.cn/link/4c0303ffb193bd5e66078909a15268aa [5] https://www.php.cn/link/9c25dc28b94e5226f1983330dc421cec [6] https://www.php.cn/link/b2f1384b8feb04d2de9a85124dc64613 [7] https://www.php.cn/link/f1e1fd9e97f59379ed79bdf258d55042 [8] https://www.php.cn/link/9a5859b8f76280c97c0c185a19d17014 [9] https://www.php.cn/link/d3f010d6bc392b904f63ce5792891b71 [10] https://www.php.cn/link/4d419d5b4274ea8faaf4f37410b97bd6

以上がPromise.all()の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート