1

我试图将一些复杂性重构为一个名为 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);
})
4

3 回答 3

5

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

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

像这样的东西...

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

如果您想更安全[[Call]],请确保使用typeof(链接到我自己的博客文章)实现回调。

于 2013-04-19T06:57:18.507 回答
0

The getData function is not returning anything! The getConnection function inside the getData function is calling a function which calls a function which returns something; the getData function itself is not returning anything.

What's more, if this code executes asynchronously, all the returns will execute long after the getData function has returned.

You're either going the synchronous return route or the asynchronous callback route, you can't mix both styles.

于 2013-04-19T07:00:03.520 回答
0

Your getData function does not return anything - the return statements inside the code are all for the anonymous functions which you pass into connection.query and connection.query.

您的与连接相关的函数是异步的 - 即它们在您调用它们后立即返回,而无需等待任何结果可用。如果您想对返回的结果执行某些操作,您需要在其中一个匿名函数中执行此操作,而不是在getData完成后立即执行此操作。

于 2013-04-19T07:01:14.937 回答