Javascript Mongodb异步调用?

Javascript Mongodb异步调用?,javascript,node.js,mongodb,asynchronous,Javascript,Node.js,Mongodb,Asynchronous,如何避免异步调用在这种情况下,每次res.render太早并且状态中缺少对象时,我都会尝试所有方法。playingCollection是mongodb集合 var state = []; playingCollection.find({},function(err, companies) { companies.each(function(err,company){ if (company !== null) { var obj = company

如何避免异步调用在这种情况下,每次res.render太早并且状态中缺少对象时,我都会尝试所有方法。playingCollection是mongodb集合

var state = [];
playingCollection.find({},function(err, companies) {
    companies.each(function(err,company){
        if (company !== null) {
            var obj = company.playername;
            state.push(obj);
        }
        res.render('index', { title: 'Demo', error: req.query.error, players: state, head: 'Currently playing:'});
        state = [];
        return;
    });
});    

下面是一种在调用find()后使用toArray处理此问题的方法:

playingCollection.find({}).toArray(函数(err,companys){
如果(错误){
res.render('error',{whatever});
返回;
}
var状态=[];
var i;

下面的for(i=0;i是一种使用从
find
返回的
Cursor
对象的简单方法。它只依赖于当列表用尽时
每个
调用将传递一个
null

var state = [];
playingCollection.find({}).each(function(err, company) {
    if (company !== null) {
        state.push(company.playername);
    } else {
        res.render('index', { title: 'Demo', error: req.query.error, players: state,  
                          head: 'Currently playing:'});
        return;
    }
});    
如果您知道您只对集合中的一个字段感兴趣,还应使用可选的
投影
参数限制结果:

playingCollection.find({}, { playername: 1 }).each(....);
在上面的例子中,它将只返回每个文档的
playername
\u id
字段

playingCollection.find({}, { playername: 1 }).each(....);