2015-07-10 70 views
0

我在尝试将返回数据保存到父范围时遇到了一些范围问题。这里是我的来源,任何帮助将不胜感激。我不能为我的生活得到表格=数据。NodeJS无法访问子对象中的对象范围

我的数据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

通过时间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); 
}); 
+0

它的工作,谢谢! –