NodeJS不能访问子节点中的对象作用域

NodeJS Can't Access Object Scope in Children

本文关键字:对象 作用域 子节点 不能 访问 NodeJS      更新时间:2023-09-26

在尝试将返回数据保存到父范围时,我遇到了一些范围问题。这是我的来源,任何帮助将是非常感激的。我怎么也弄不出table = data.

我的数据变量控制台。日志正确,只是作用域的问题。

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;
};

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);
});