找到正確的循環結構以確保基於Promise 的程式碼同步運作
使用基於Promise 的程式碼時,正確的循環結構是對於保證非同步操作的同步執行至關重要。在給定的場景中,目標是建立一個循環,確保在每次迭代期間以正確的順序執行「db.getUser(email).then(function(res) { logger.log(res); })」。
一種方法採用自訂的「promiseWhile」函數。雖然此方法對於一般場景很有用,但對於當前的具體情況卻帶來了不必要的複雜性。相反,一個更直接的解決方案是利用內建的陣列運算函數,如map()和reduce()。
並行與序列Promises
問題在於要求保持回應的順序,這消除了透過 Array.prototype.map() 使用並行方法。要以保留的順序建立所需的 Promise 鏈,Array.prototype.reduce() 更合適。
範例:
function fetchUserDetails(arr) { return arr.reduce(function(promise, email) { return promise.then(function() { return db.getUser(email).done(function(res) { logger.log(res); }); }); }, Promise.resolve()); }
透過使用此方法,執行「db. getUser」呼叫保證是串列的,從而確保結果的順序得以維持。程式碼可以如下呼叫:
var arrayOfEmailAddys = [...]; fetchUserDetails(arrayOfEmailAddys).then(function() { console.log('all done'); });
這種方法消除了對複雜循環或條件的需要,並確保 Promise 鏈的正確執行,即使在處理非同步操作時也是如此。
以上是如何確保循環中基於 Promise 的程式碼同步執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!