Promise.all:解析值的順序
在JavaScript 中,Promise.all 旨在透過允許解析來增強Promise 的功能同時執行多個承諾。 Promise.all 的一個關鍵方面是將解析值傳遞給其回調的順序。
根據 MDN 文檔,解析值的順序應與輸入數組中 Promise 的順序相對應。這意味著第一個要解析的 Promise 的值將首先放置在傳遞給 then() 回呼的結果陣列中。
為了確認這一點,讓我們深入研究 JavaScript Promise 規格。在「Promise.all(可迭代)」部分中,我們找到了將可迭代的 Promise 解析為單一 Promise 的步驟。關鍵細節在於步驟 4e,其中涉及為每個已解決的 Promise 創建一個內部 [[Index]] 槽。此槽明確標示了原始輸入數組中 Promise 的索引。
因此,Promise.all 實作確保在同時解析多個 Promise 時,輸出嚴格依照輸入中 Promise 的順序排序大批。只要輸入數組保持一致的排序(例如數組),這種順序保留就成立。
為了說明這一點,請考慮以下程式碼:
<code class="js">const somePromises = [1, 2, 3, 4, 5].map(Promise.resolve); Promise.all(somePromises).then(function(results) { console.log(results); // Expected result: [1, 2, 3, 4, 5] });</code>
當此程式碼時執行後,解析的值將按照 somePromises 陣列中的 Promise 的順序記錄到控制台。這示範了 Promise.all 的訂單儲存功能。
以上是`Promise.all` 是否保留解析值的順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!