[英]Mongodb asynchronous call?
在這種情況下,如何避免異步調用,每次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(function(err, companies) {
if(err) {
res.render('error', {whatever});
return;
}
var state = [];
var i;
for(i=0; i<companies.length; i++) {
state.push(companies[i].playername);
}
res.render('index', { title: 'Demo', error: req.query.error, players: state, head: 'Currently playing:'});
});
以下是使用從find
返回的Cursor
對象的簡單方法。 它僅依賴於以下事實:列表用盡時, each
調用將傳遞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;
}
});
如果您知道只對集合中的一個字段感興趣,則還應該使用可選的projection
參數限制結果:
playingCollection.find({}, { playername: 1 }).each(....);
在上面,它將僅返回每個文檔的playername
和_id
字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.