实现 Promise 循环的同步执行
如何确保循环迭代期间 Promise 调用及其链式日志记录操作的同步性?使用 PromiseWhile() 的初始方法似乎很有前途,但引发了对保留正确执行顺序的担忧。
相反,请考虑利用 Promise 的固有功能来完成此任务。通过将问题定义为一系列异步调用来获取用户详细信息并维护原始响应顺序,我们可以利用 Array.prototype.reduce() 构建扁平的 .then() 链。
解决方案:
以下代码举例说明了此方法:
<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>
此函数接受电子邮件地址数组并返回 Promise。 reduce() 函数迭代数组并为每封电子邮件执行 getUser 承诺。结果将同步记录在 did() 回调中。
调用函数:
要调用该函数,请填充电子邮件地址数组 (arrayOfEmailAddys) 并使用如下所示:
<code class="javascript">fetchUserDetails(arrayOfEmailAddys).then(function() { console.log('all done'); });</code>
此代码创建一个线性 Promise 链,确保每个 Promise 都按顺序解析,并且日志记录操作按正确的顺序执行。
以上是如何在保持顺序的同时实现 Promise 循环的同步执行?的详细内容。更多信息请关注PHP中文网其他相关文章!