使用陣列時,通常需要為每個元素順序執行一系列任務,並在 Promise 之間傳遞參數。
要實現這一點,可以使用一系列巢狀的 .then() 呼叫。然而,隨著數組大小的增加,這種方法變得麻煩且不靈活。
一個簡潔的解決方案是使用.reduce() 方法將數組折疊成一系列Promise 數量:
<code class="js">const promiseChain = myArray.reduce( (p, x) => p.then(() => myPromise(x)), Promise.resolve() );</code>
更容易維護的方法是使用非同步函數來迭代數組並按順序執行每個Promise:
<code class="js">const forEachSeries = async (iterable, action) => { for (const x of iterable) { await action(x); } }; forEachSeries(myArray, myPromise);</code>
如果需要promise的回傳值,可以對mapSeries函數稍作修改:
<code class="js">const mapSeries = async (iterable, fn) => { const results = []; for (const x of iterable) { results.push(await fn(x)); } return results; };</code>
這種方法在以下情況下提供了更大的靈活性和程式碼可讀性:處理承諾的動態陣列。
以上是如何為動態數組順序執行 Promise?的詳細內容。更多資訊請關注PHP中文網其他相關文章!