如何将范围传递给node-mysql中的回调?

时间:2012-02-01 14:42:39

标签: javascript mysql node.js callback scope

我从以下代码中收到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 个答案:

答案 0 :(得分:3)

你可以bind [docs] clientcallback。在回调中,它将以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) {..};