Как я могу передать область обратного вызова в node-mysql? - PullRequest
1 голос
/ 01 февраля 2012

Я получаю ошибку client is not defined из следующего кода:

var mysql = require('mysql');
var conf = {
  'database':'database',
  'user':'user',
  'password':'password'
};

function mysqlQuery(mysql, conf, query, callback) {
  var client = mysql.createClient({
    user:conf.user,
    password:conf.password
  });
  client.query('USE ' + conf.database, function () {
    client.query(query, callback);
  });
}

mysqlQuery(
  mysql,
  conf,
  'SELECT * FROM users;',
  function selectCb(err, results) {
    if (err) {
      throw err;
    }
    console.log(results);
    client.end();
  }
);

Как я могу передать переменную клиента моей функции обратного вызова? Я не имею никакого контроля над тем, как функция обратного вызова будет вызываться так, как она вызывается модулем mysql.

1 Ответ

3 голосов
/ 01 февраля 2012

Вы можете bind [документы] client до callback. Внутри обратного вызова он будет доступен как this тогда:

client.query(query, callback.bind(client))

и

this.end();

Вы также можете передать его в качестве первого параметра:

client.query(query, callback.bind(null, client))

или

client.query(query, function(err, results) {
    callback(client, err, results);
});

, где callback определяется как

function selectCb(client, err, results) {..};
...