首页 >web前端 >js教程 >JavaScript 中 Promise 迭代时如何实现同步日志记录?

JavaScript 中 Promise 迭代时如何实现同步日志记录?

Barbara Streisand
Barbara Streisand原创
2024-10-26 21:43:02539浏览

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