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();
  });
}

ただし、このような関数から呼び出されると、関数内のコードは正常に機能しますが、undefined が返されます。

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 に答える