NodeJS无法访问儿童中的对象范围

时间:2015-07-10 03:24:32

标签: javascript node.js mongodb scope

尝试将返回数据保存到父作用域时,我遇到了一些范围问题。这是我的来源,任何帮助将不胜感激。我不能为我的生活得到表=数据。

我的数据var console.logs正确只是一个范围问题。

function OpenDB(mongoUrl, callBack){
    var MongoClient = mongodb.MongoClient;
    var url = mongoUrl || "mongodb://" + process.env.IP + "/test";
    MongoClient.connect(url, function(err, db) {
        if(err){
           console.log(err);
        }
      console.log(" Connected correctly to server ");
      callBack(db, function(){
          console.log(" Disconnected from server ");
            db.close();
      });
    }.bind(this));
}
var GetTableAsArray = function(tableName){
    var table = [];
    OpenDB(null, function(db,cb){
        db.collection(tableName).find().toArray(function(err, data){
            if(err){
                console.log(err);
            }
            //this is the problem
            table = data;
            cb();
        });
    });
    return table;
};

1 个答案:

答案 0 :(得分:1)

GetTablesAsArray函数返回时,table仍然只是一个空数组。这里的问题是你的查询是以异步方式发生的,这意味着你的代码在继续之前不会等待它完成。一旦获取了表,您就可以使用回调来执行所需的任何代码。

var GetTableAsArray = function(tableName, callback){
    OpenDB(null, function(db,cb){
        db.collection(tableName).find().toArray(function(err, data){
            if(err){
                console.log(err);
            }
            //this is the problem
            table = data;
            cb();
            callback (data);
        });
    });
};

GetTableAsArray('tableName', function (table) {
  console.log(table);
});