我有下一个代码,用于使用pg-client获取某些数据:
exports.load_data_view = function (pg, pg_config, param, callback) {
pg.connect(pg_config, function (err, pgClient, pgDone) {
if (err) {
console.log(err);
res.end(500);
}
var query = 'some query...';
data = [];
pgClient.query(query, function (err, result) {
pgClient.end();
if (err) {
callback(err, null);
return;
}
data1 = [];
for (var i = 0; i < result.fields.length; i++) {
data1.push(result.fields[i]["name"]);
}
data.push(data1);
callback(null, data);
});
}
)
}
当我需要使用数据时,我这样做:
for(somecolecction)
{
data=[]
exports.load_data_view(pg, pg_config, param, function (err, data) {
console.log(data); //data is populated
});
//DoSomethingWith data
console.log(data) // data is empty
}
问题是:在调用内部,data
包含我需要的所有内容,在块“DoSomethingWith data”中,data
已丢失其所有值。我已经知道pgClient是异步的,但是,这种使用方法不应该解决这个问题吗?
答案 0 :(得分:0)
代码是异步的,因此第二个console.log在第一个之前被调用。
因此,如果您想对数据执行某些操作,请在第一个console.log所在的回调函数中执行此操作。