为什么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();
答案 0 :(得分:2)
是的,因为它正在运行asynchronously
,当result.rows
被分配给currentCauses
变量时,行'return currentCauses'
已经被执行,因此值未定义。< / p>
您可能希望按照以下方式执行此操作
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在执行时间之后不会立即给出结果。从数据库中检索数据至少需要0.00秒。因此,在“执行sql”和“接收请求的数据”之间的非常短的时间内,JavaScript已经执行return currentCauses;
,而正确的数据仍处于检索过程中。因为它是异步的,不会等待。你可能想在网上找到很好的示例代码。
Plus将函数定义为
是一个很好的做法getCauses = function () { ... }
答案 1 :(得分:0)
因为currentCauses
在从pg.connect
函数返回后,在异步调用函数(将函数作为参数传递给getCauses
)中初始化。当您返回时,currentCauses
的值未定义。