首頁  >  文章  >  web前端  >  Promise.all 是否保證解析值的順序與輸入可迭代順序相符?

Promise.all 是否保證解析值的順序與輸入可迭代順序相符?

Barbara Streisand
Barbara Streisand原創
2024-11-03 14:41:31578瀏覽

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

在Promise.all 保留順序

Promise.all 是一個JavaScript 函數,它接受可迭代的Promise 並傳回一個解析的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>

在這種情況下,輸出將為[1, 2, 3, 4, 5],無論哪個Promise 先解決。

以上是Promise.all 是否保證解析值的順序與輸入可迭代順序相符?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn