Node.JS:类方法作为回调

时间:2015-02-27 17:48:26

标签: javascript node.js

我在node.js中使用类,但在此示例中,this.done未定义。 关于如何轻松解决这个问题的任何想法?我现在想避免回到地狱或学会使用承诺。

MyClass.prototype.method1 = function(done) {
  this.method1Done = done;
  mysql.query([...], this._method1QueryCallback);
}

MyClass.prototype._method1QueryCallback = function(err, rows) {
  [...]
  this.done(err, rows)
}

1 个答案:

答案 0 :(得分:1)

您需要bind方法的特定this上下文才能将其用作回调,否则调用者将提供自己的this(可能不是您的期望的)。

最简单的方法是:

mysql.query([...], this._method1QueryCallback.bind(this))

假设您在致电this时知道mysql.query是正确的范围。

这确实使得以后解除回调很难,如果你要设置一个事件处理程序,这可能是一个问题。在这种情况下,您可以执行以下操作:

this._method1QueryCallback = this._method1QueryCallback.bind(this);

在构造函数中的某个位置,或者在传递回调之前。