【问题标题】:How can I pass scope to a callback in node-mysql?如何将范围传递给 node-mysql 中的回调?
【发布时间】:2012-02-24 05:54:37
【问题描述】:

我从以下代码中得到 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 模块调用回调函数的方式。

【问题讨论】:

    标签: javascript mysql node.js callback scope


    【解决方案1】:

    你可以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) {..};
    

    【讨论】:

    • 第三个选项更好,它将client传递为client而不是this,使代码更易于理解。
    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    相关资源
    最近更新 更多