为什么resultofgetCauses
未定义?我不确定函数是否未返回currentCauses
或未将其分配给resultofgetCauses
。 。 。或者这与异步性有关。
function getCauses(){
var currentCauses;
client = pg.connect(connectionString, function(err, client, done){
if(err) console.log(err);
client.query('SELECT * FROM causes', function(err, result){
//console.log(result.rows);
console.log('poo');
currentCauses=result.rows;
//console.log(currentCauses);
});
});
return currentCauses;
};
var resultofgetCauses = getCauses();
最佳答案
是的,因为它正在运行asynchronously
,所以在将result.rows
分配给currentCauses
变量时,已经执行了行'return currentCauses'
,因此该值未定义。
您可能要按照以下步骤进行操作
var resulttofgetCauses;
function getCauses(){
var currentCauses;
client = pg.connect(connectionString, function(err, client, done){
if(err) console.log(err);
client.query('SELECT * FROM causes', function(err, result){
//console.log(result.rows);
console.log('poo');
currentCauses=result.rows;
//console.log(currentCauses);
resulttofgetCauses = currentCauses;
});
});
};
getCauses();
具体来说,执行
'SELECT * FROM causes'
sql并不会在执行时间之后立即为您提供结果。从数据库检索数据至少需要花费几秒钟的时间。因此,在“执行sql”和“接收请求的数据”之间的极短时间内,JavaScript已执行return currentCauses;
,而正确的数据仍在检索中。因为它是异步的,所以不会等待。您可能想在互联网上找到很好的示例代码。另外,定义函数如下是一个好习惯
getCauses = function () { ... }