无法在Nodejs中访问db结果,它总是返回null

var robject=[]; async.waterfall([ function (callback) { for(var i in serial){ Router.find({},{r_serial_no:serial[i]},function (err,routerData) { robject = robject.concat(routerData); }); } console.log('Robject= '+robject); //THIS RETURNS NULL callback(null, robject); }, function (blogs, callback) { res.render('index', {dispatched_data:dispatched_data }); callback(null, 'Ended..' ); } ], function (err, result) { console.log(result); }); 

这是我的瀑布模型,在这里我需要从schema.find方法到该方法的外部访问robject 。 但它总是返回null ..如何访问?

你有语法错误:

  for(var i in serial){ Router.find({},{r_serial_no: i},function (err,routerData) { robject = robject.concat(routerData); }); } 

“for”循环在每次迭代中将“i”定义为数组中的下一项

我在这里看到的问题是在for...in循环中。 即使您的stream程即Router.find未完成,您的callback也会被Router.find 。 你可以尝试下面的代码,这可能会有所帮助。

不像你的serial对象,请创build一个名为serials数组的数组。

 var robject=[]; async.waterfall([ function (callback) { async.each(serials, function(serial, localCb){ Router.find({},{r_serial_no:serial},function (err,routerData) { robject = robject.concat(routerData); localCb() }); }, function(err){ console.log('Robject= '+robject); callback(null, robject); } ); }, function (blogs, callback) { res.render('index', {dispatched_data:dispatched_data }); callback(null, 'Ended..' ); } ], function (err, result) { console.log(result); });