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

标签 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 模块调用回调函数的方式。

最佳答案

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

其中回调定义为

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

关于javascript - 如何将范围传递给 node-mysql 中的回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9097739/

相关文章:

javascript - Three.js - 自定义网格上的奇怪线条

javascript - 错误回调 {"readyState":4 ,"status":200 ,"statusText" :"success"}

javascript - 如何在 Chart.js 中添加带有表格的图表?

node.js - Heroku 上的 Socket.io : client-side code

node.js - 使用 async.waterfall 减少嵌套但增加了困惑

http - node.js 安装错误需要 (‘http’ );

javascript - 在多个元素上使用 jquery 插件并稍加修改

mysql - 强制性是什么意思? MySQL 用户变量

mysql - 在mysql中创建create语句时需要在列中添加两个小时

php - 如何在cmd提示符下获取php-cli版本7