Node.js - 等待多个函数执行完毕

5

我有一些类似于以下代码的内容:

var data = someobject;

for(var x in data){
    mongo.findOne({ _id:data[x]._id },function(e,post){
        if(post != null){

            post.title = 'omg updated';
            post.save(function(){
                console.log('all done updating');
            });

        }
    });
}

// I need all ^ those functions to be done before continuing to the following function:
some_function();

我研究了Async库,当我需要同时运行一组函数时,我会使用它来进行并行操作。但是我不确定如何实现所需的效果。
这些函数都可以并行运行,我只需要知道何时所有函数都完成即可。

我不确定您是否正在寻找一个体面的库,但如果您只需要一些琐碎的东西,您可以使用计数器:最初将其设置为Object.keys(data).length,并在.save回调中递减它 - 当它达到0时,运行some_function() - pimvdb
@pimvdb 那会起作用(正是我所想的),但这只是一个小技巧,为了得到正确的方法,我们需要一些发布/订阅消息系统(以免与事件和回调混淆)。 - Poelinca Dorin
1个回答

8
这是一个完美的案例,可以使用Async的forEach方法来执行数组元素的并行任务,然后调用回调函数,示例:
async.forEach(Object.keys(data), function doStuff(x, callback) {
  // access the value of the key with with data[x]
  mongo.findOne({ _id:data[x]._id },function(e, post){
    if(post != null){
      post.title = 'omg updated';
      post.save(callback);
    }
  });  
}, function(err){
  // if any of the saves produced an error, err would equal that error
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接