承诺在foreach

我有一些关于逻辑的代码。

我下面的代码块按预期工作,所以willbeUpdatedvariables不能以同步的方式逐字更新。

 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 )放在getPromisedDataparsing的函数中。

所以:

 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 } });