承诺在foreach
我有一些关于逻辑的代码。
我下面的代码块按预期工作,所以willbeUpdated
variables不能以同步的方式逐字更新。
var willbeUpdated = 1; anArray.forEach(function(i){ getPromisedData(i).then(function(d){ willbeUpdated += d; }); }); if (wiillbeUpdated == something) { // some logic }
所以问题是,我是否必须为这个foreach逻辑再次创build一个承诺的方法, outside if logic
的话,那么在这种情况下是否是一个最佳实践或者其他可取的想法呢?
编辑:我问这个问题听到最好或更好的方法嵌套asynchronous函数处理,而不是确切的代码块,谢谢。
使用Promise.all()
。
var willbeUpdated = 1, promises = []; anArray.forEach(function(i){ promises.push(getPromisedData(i)); }); Promise.all(promises).then(function() { // some logic });
我认为你要找的是把if块( willBeUpdated == something
)放在getPromisedData
parsing的函数中。
所以:
var willbeUpdated = 1; anArray.forEach(function(i){ getPromisedData(i).then(function(d){ willbeUpdated += d; if (wiillbeUpdated == something) { // some logic } }); });
会工作。 如果你能给我一个更好的想法,那么你可能会有更好的解决scheme。
q
和许多其他承诺库可以处理承诺数组,并等待他们的结果。
var q = require('q'); var willbeUpdated = 1; var todo = []; anArray.forEach(function(i){ todo.push(getPromisedData(i).then(function(d) { return (willbeUpdated+= d); })); }); q(todo).then(function() { if (wiillbeUpdated == something) { // some logic } });