无法在Nodejs中访问db结果,它始终返回null

时间:2017-08-09 05:39:19

标签: javascript node.js mongodb express mongoose

 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 .. 如何访问??

2 个答案:

答案 0 :(得分:1)

您有语法错误:

 for(var i in serial){
                Router.find({},{r_serial_no: i},function (err,routerData) {
                    robject = robject.concat(routerData);
                });
            }
" for" for"循环定义" i"作为每次迭代的数组中的下一项

答案 1 :(得分:1)

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

serial对象不同,请创建一个名为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);
    });