」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何確保循環中基於 Promise 的程式碼同步執行?

如何確保循環中基於 Promise 的程式碼同步執行?

發佈於2024-11-04
瀏覽:815

How to Ensure Synchronous Execution of Promise-Based Code in a Loop?

找到正確的循環結構以確保基於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