ホームページ > ウェブフロントエンド > jsチュートリアル > Promise.all は、解決された値の順序が入力の反復可能な順序と一致することを保証しますか?

Promise.all は、解決された値の順序が入力の反復可能な順序と一致することを保証しますか?

Barbara Streisand
リリース: 2024-11-03 14:41:31
オリジナル
623 人が閲覧しました

Does Promise.all Guarantee the Order of Resolved Values Matches the Input Iterable Order?

Promise.all での順序の保持

Promise.all は、Promise の反復可能値を受け取り、解決する単一の Promise を返す JavaScript 関数です。すべての入力 Promise が解決されたら。これは、続行する前に複数の非同期操作が完了するのを待つためによく使用されます。

よくある疑問が生じます: 出力 Promise 内の解決された値の順序は、入力 Promise の順序と一致することが保証されていますか?

MDN ドキュメントによると、Promise.all の then() コールバックに渡される値は Promise の順序で提示されるようです。この質問は仕様からの確認を求めています。

Promise.all 仕様 (https://tc39.github.io/ecma262/#sec-promise.all) には次のように記載されています。

  • Promise.all(iterable) は反復可能を入力として受け取り、IteratorStep(iterator) を使用してそれを反復処理します。
  • 解決された各 Promise には内部 [[Index]] スロットがあり、元の反復可能内のインデックスを示します。
  • 解決は Promise.all() Resolve によって実装されます。解決された Promise の [[Index]] スロットは、出力配列内の値のインデックスを決定するために使用されます。

これらの点を組み合わせると、Promise.all の出力が常に入力反復可能オブジェクトの順序に厳密に従っていることは明らかです。これは、配列を Promise.all に渡すと、解決された値が入力配列に現れたのと同じ順序で出力配列に現れることを意味します。

これを示すために、次の例を考えてみましょう。

<code class="javascript">const promises = [1, 2, 3, 4, 5].map(Promise.resolve);
Promise.all(promises).then((results) => {
  console.log(results); // [1, 2, 3, 4, 5]
});</code>
ログイン後にコピー

この場合、どの Promise が最初に解決されるかに関係なく、出力は [1, 2, 3, 4, 5] になります。

以上がPromise.all は、解決された値の順序が入力の反復可能な順序と一致することを保証しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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