首頁 >web前端 >js教程 >如何確保循環中基於 Promise 的程式碼同步執行?

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

Susan Sarandon
Susan Sarandon原創
2024-10-26 19:22:30334瀏覽

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 鏈的正確執行,即使在處理非同步操作時也是如此。

以上是如何確保循環中基於 Promise 的程式碼同步執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn