问题陈述
我们如何确保循环同步迭代,执行每个迭代的Promise 及其后续日志操作 (logger.log(res)) 的顺序是否正确?
解决方案
避免 PromiseWhile
虽然 PromiseWhile 函数可以方便用 Promise 进行循环,但它不能保证链式操作的执行顺序。
使用 Reduce 进行序列化
维持期望的结果为了排序,我们可以利用 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>
示例用法
<code class="javascript">// Compose an array of email addresses var arrayOfEmailAddys = [...]; fetchUserDetails(arrayOfEmailAddys).then(function() { console.log('all done'); });</code>
好处
这种方法消除了PromiseWhile 方法中需要额外的变量和条件函数。此外,它还简化了代码并确保 Promise 执行的正确顺序。
以上是如何保证 Promise 操作同步循环执行?的详细内容。更多信息请关注PHP中文网其他相关文章!