簡體   English   中英

Mongodb異步調用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM