Mongodbasynchronous获取结果

这是我的行动,将从用户收集所有用户

app.post('/login', function(req,res,next){ users = self._db.get('users', {}) }) 

这是我在数据库类中的function

 this.get = function( col, opt ) { var result = [], opt = opt || {}; query = db.collection(col).find( opt ); query.each( function(err, doc) { console.log( doc ); if( doc != null ) { result.push( doc ); } }); return result; }; 

当我login用户对象它返回空数组,但是当我logging每个文件内function它成功的工作

问题是我怎样才能得到asynchronous的结果?

你错过了callback函数。 由于Node.js在devise上是asynchronous的,所有的I / O操作都需要callback。

回到你的例子,我build议你使用和尚 ,做这样的事情:

 var db = require('monk')('localhost/mydb'); var users = db.get('users'); app.post('/login', function(req, res) { users.find({}, function(err, data) { // remember to handle error here, for example; // if (err) return res.send('error'); res.json(data); }); }); 

基本上,你所缺less的callback是users.find函数的第二个参数。

使用像async这样的库来进行callback,当每个循环完成迭代所有文档时,可以返回结果数组。

asynchronous“每个”function