首页 >web前端 >js教程 >如何确保循环中基于 Promise 的代码同步执行?

如何确保循环中基于 Promise 的代码同步执行?

Susan Sarandon
Susan Sarandon原创
2024-10-26 19:22:30328浏览

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