无法从函数中的函数返回数组

时间:2012-09-05 15:15:55

标签: javascript arrays variables scope

请帮助使用以下代码。我在selectCb函数中返回“result”变量时遇到问题。 “result”已分配并在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;

1 个答案:

答案 0 :(得分: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等库可以在回调过于嵌套时提供帮助。