我在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)
}
答案 0 :(得分:1)
您需要bind
方法的特定this
上下文才能将其用作回调,否则调用者将提供自己的this
(可能不是您的期望的)。
最简单的方法是:
mysql.query([...], this._method1QueryCallback.bind(this))
假设您在致电this
时知道mysql.query
是正确的范围。
这确实使得以后解除回调很难,如果你要设置一个事件处理程序,这可能是一个问题。在这种情况下,您可以执行以下操作:
this._method1QueryCallback = this._method1QueryCallback.bind(this);
在构造函数中的某个位置,或者在传递回调之前。