找到正確的循環結構以確保基於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 鏈的正確執行,即使在處理非同步操作時也是如此。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3