在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 的輸出將始終嚴格遵循輸入可迭代的順序。這意味著,如果您將陣列傳遞給 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中文網其他相關文章!