首頁  >  文章  >  web前端  >  JavaScript 中 Promise 迭代時如何實現同步日誌記錄?

JavaScript 中 Promise 迭代時如何實現同步日誌記錄?

Barbara Streisand
Barbara Streisand原創
2024-10-26 21:43:02428瀏覽

How to Achieve Synchronous Logging When Iterating Through Promises in JavaScript?

同步迭代 Promise 呼叫

常見場景涉及循環一系列 Promise 呼叫(例如 API 請求),以確保維持執行順序。 Bluebird 透過 PromiseWhile 函數提供了一個解決方案。但是,循環內 logger.log(res) 呼叫的順序有問題。

建議的解決方案

不要使用PromiseWhile,請考慮以下方法:

<code class="javascript">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());
}</code>

這段代碼:

  1. 建立一個Promise 陣列:它接受一組電子郵件地址(arr) 並根據每封電子郵件組成一系列Promise。
  2. 使用reduce進行序列執行:它利用Array.prototype.reduce順序執行promise。
  3. 保證順序:透過將promise與then連結起來,它確保僅在先前的 Promise 解決後才呼叫 logger.log(res)。

用法範例

使用電子郵件地址陣列呼叫fetchUserDetails 函數:

<code class="javascript">// Compose an array of email addresses
const arrayOfEmailAddys = [...];

fetchUserDetails(arrayOfEmailAddys).then(function() {
    console.log('all done');
});</code>

這種方法消除了對遞歸、外部計數器和複雜條件函數的需要,同時保持了logger.log(res) 呼叫所需的同步。

以上是JavaScript 中 Promise 迭代時如何實現同步日誌記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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