Javascript Mongodb异步调用?
如何避免异步调用在这种情况下,每次res.render太早并且状态中缺少对象时,我都会尝试所有方法。playingCollection是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
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(....);