0

请帮助使用以下代码。我无法在 selectCb 函数中返回“结果”变量。“结果”已分配并在 selectCb 范围内正常工作,但在范围之外我无法访问它。

function queryDB(client,queryString) {

    result = ''; //declare global variable

    client.query(queryString, function selectCb(error, results, fields) {

      if (results.length > 0) result = results[0]; 
          console.log(result['id']); //WORKS HERE

    });

    client.end();

    console.log(result['id']); //DOES NOT WORK - UNDEFINED

    return result; //return result array

};

var data = queryDB(client,"select id from table");

console.log(data['id']) //DOES NOT WORK - UNDEFINED;
4

1 回答 1

1

您需要将回调作为参数,并在有数据时调用它:

function queryDB(client, queryString, callback) {
    client.query(queryString, function selectCb(error, results, fields) {
        if (results.length > 0) {
            callback(results[0]);
        }
    });
};

var data = queryDB(client,"select id from table", function (data) {
  console.log(data['id']);
});

当回调变得过于嵌套时,诸如async之类的库可以提供帮助。

于 2012-09-05T15:23:18.097 回答