如何在Node.js中等待函数完成?

时间:2016-02-18 23:53:59

标签: javascript node.js mongodb

var count = 0;
list.forEach(function(entry){
    var coll = db.collection(entry);
    coll.count(function(err,result){
       count = count + result;
    })
})

function(count){
//do something with count
}

我正在使用node.js上的mongoDB本机驱动程序,问题是在它完成之后应该使用count的函数将每个集合中的所有条目计入到早期,这很明显,因为它是asynch 。我已经搜索了一段时间的解决方案,但还没有找到任何东西。

1 个答案:

答案 0 :(得分:1)

您可以使用承诺

Promise.all(
    list.map(function(entry){
        return new Promise(function(resolve, reject) {
            db.collection(entry).count(function(err, result){
                if (err) return reject(err);
                resolve(result);
            });
        });
    })
).then(count);

function count(result) {
    var sum = result.reduce(function(a,b) { return a + b });
}