为什么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 () { ... }

07-24 09:52