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