使用陣列參數順序執行 Promise
在某些情況下,您可能需要順序執行 Promise,從陣列傳遞參數。當動態填充數組並且執行順序至關重要時,這是必要的。
建立「可暫停循環」的一種方法是重複使用 .then 方法。然而,這可能很麻煩,並會導致金字塔形的 Promise 鏈。
使用Promise
更簡潔的解決方案涉及使用Array.reduce 將Promise 鏈折疊成單一Promise:
myArray.reduce( (p, x) => p.then(() => myPromise(x)), Promise.resolve() )
這種方法創建了一系列鍊式承諾,確保順序執行。
使用非同步函數
或者,非同步函數可以實現更具可讀性和更有效率的實作。以下範例使用非同步函數來迭代並執行Promise:
const forEachSeries = async (iterable, action) => { for (const x of iterable) { await action(x) } } forEachSeries(myArray, myPromise)
收集回傳值
如果需要從Promise 收集回傳值,可以使用修改後的版本forEachSeries 函數的mapSeries:
const mapSeries = async (iterable, fn) => { const results = [] for (const x of iterable) { results.push(await fn(x)) } return results }
此函數迭代可迭代對象,收集Promise 的結果並傳回結果陣列。
透過使用這些技術,您可以輕鬆地按順序執行 Promise,從陣列傳遞參數,確保執行順序並根據需要收集結果。
以上是如何使用數組參數順序執行 Promise?的詳細內容。更多資訊請關注PHP中文網其他相關文章!