找到正确的循环结构以确保基于 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中文网其他相关文章!