找到正确的循环结构以确保基于 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 链的正确执行,即使在处理异步操作时也是如此。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3