在foreach中的承诺

时间:2015-12-11 21:14:21

标签: javascript node.js foreach promise

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

我的以下代码块按预期工作,因此willbeUpdated变量无法以同步方式逐字更新。

var willbeUpdated = 1;
anArray.forEach(function(i){
   getPromisedData(i).then(function(d){
       willbeUpdated += d;
   });

});
if (wiillbeUpdated == something) {
  // some logic
}

所以问题是,我是否必须为该foreach逻辑再次创建另一个承诺的方法并将outside if logic放在其当时的方法中,这将是最佳实践,还是在这种情况下的任何其他更好的想法?

编辑:我问这个问题,听听有关嵌套异步函数处理的最佳或更好的方法,而不是确切的代码块,谢谢。

3 个答案:

答案 0 :(得分:2)

使用Promise.all()

var willbeUpdated = 1,
    promises = [];
anArray.forEach(function(i){
   promises.push(getPromisedData(i));
});
Promise.all(promises).then(function() {
  // some logic
});

答案 1 :(得分:1)

我认为你要找的是将if块(willBeUpdated == something)放在getPromisedData解析的函数中。

所以:

var willbeUpdated = 1;
anArray.forEach(function(i){
   getPromisedData(i).then(function(d){
       willbeUpdated += d;
       if (wiillbeUpdated == something) {
         // some logic
       }
   });

});

会好好的。如果你能让我更好地了解你想要做什么,那么可能会有更好的解决方案。

答案 2 :(得分:1)

q和许多其他的promise库可以处理promise数组,并等待它们的结果。

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