首頁 >web前端 >js教程 >`Promise.all()` 是否保留解析值的順序?

`Promise.all()` 是否保留解析值的順序?

DDD
DDD原創
2024-11-04 05:22:29997瀏覽

Does `Promise.all()` Preserve the Order of Resolved Values?

Promise.all:保留解析值的順序

Promise.all() 方法接受一個iterable 作為其參數並傳回一個新的一旦iterable 中的所有承諾都解決了,承諾就會解決。問題出現了:解析值的順序是否保證與可迭代中 Promise 的順序相符?

根據 MDN 文檔,解析值應該按照 Promise 的順序出現。然而,對這種特定行為的直接引用在規範中並沒有立即顯現出來。

深入研究規範,我們發現 PerformPromiseAll() 是透過傳遞給 Promise.all() 的可迭代物件來呼叫的。 PerformPromiseAll() 然後使用 IteratorStep() 迭代可迭代對象,這保證了 Promise 的順序。

此外,每個已解析的 Promise 都有一個內部 [[Index]] 槽,表示其在原始輸入可迭代物件中的索引。此槽在解析過程中使用,以確保輸出數組保持原始順序。

綜上所述,只要輸入,Promise.all() 中解析值的順序就會被嚴格保留iterable 是有序的。以下程式碼片段對此進行了範例:

<code class="js">const slow = new Promise(resolve => setTimeout(resolve, 200, 'slow'));
const instant = 'instant';
const quick = new Promise(resolve => setTimeout(resolve, 50, 'quick'));

Promise.all([slow, instant, quick]).then(responses => {
  responses.map(response => console.log(response));
});

// Output: [ 'instant', 'quick', 'slow' ]</code>

以上是`Promise.all()` 是否保留解析值的順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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