功能不返回结果

时间:2013-04-19 06:56:01

标签: javascript

我正在尝试将一些复杂性重构为一个名为getData的函数,但调用此函数的代码似乎没有得到结果。

function getData(sql) {
  pool.getConnection(function(err, connection) {
    if (err) return;
    connection.query(sql, function(err, rows) {
      if (err) return;
      if (rows.length > 0) {
        console.log(rows);    // This outputs result from table
        return rows;
      } else {
        return [{"error":"Not found"}];
      }
    });
    connection.end();
  });
}

然而,当从这样的函数调用它时,我得到未定义的返回,即使函数内部的代码工作正常。

app.get('/1/employees/past', function(req, res, next) {
    var rows = getData("select * from users");
    res.json(rows);
})

3 个答案:

答案 0 :(得分:5)

你的return从内部函数返回,这不会影响外部函数。

您需要捕获它并将其返回,并且看到它似乎与回调一起使用时,您需要将额外的回调传递给getData()

像这样......

function getData(sql, callback) {
     // ...    
     connection.query(sql, function(err, rows) {
         // ...
         callback && callback(rows); // etc
     });
     // ...
}

如果您希望更安全,请确保回调通过typeof实施[[Call]](链接到我自己的博文)。

答案 1 :(得分:0)

getData函数没有返回任何内容! <{1}}函数内部的getConnection函数正在调用一个函数,该函数调用返回某个函数的函数; getData函数本身没有返回任何内容。

更重要的是,如果此代码异步执行,所有返回将在getData函数返回后很长时间执行。

你要么采用同步getData路由还是异步回调路由,你不能混合使用这两种风格。

答案 2 :(得分:0)

您的getData函数不返回任何内容 - 代码中的return语句全部用于您传递到connection.queryconnection.query的匿名函数。

您的连接相关功能是异步的 - 即它们在您调用它们之后立即返回,而不等待任何结果可用。如果你想对返回的结果做一些事情,你需要在其中一个匿名函数中执行,而不是在getData完成后立即执行。