我正在编写一个带有send
方法的Javascript类,该方法从其他类成员获取承诺并解析它。传递给它的成功和错误函数是类的成员。它没有按预期工作。方法代码:
Request.prototype.send = function () {
if (!this.promise) {
this.promise = this.api[this.method](this.flatArgsArray, this.options);
this.promise.then(this.distributeResults, this.distributeErrors);
} else {
throw new Error('This request was already answered');
}
}
distributeResults
方法失败,代码为:
Request.prototype.distributeResults = function (result) {
if (this.isEntityRequest) {
var items = result.body[array_names[this.method]];
items.forEach(this.distributeEntities);
} else {
this.callbacks.forEach(function (cb) {
cb(null, result);
});
}
}
this.callbacks.forEach
行未通知this.callbacks
未定义。但是this.isEntityRequest
必须是真的所以我调试并发现以this.
开头的所有内容都是未定义的。
所以在send
方法中,当我将方法传递给promise的then
时,我将distributeResults
方法绑定为this.distributeResults.bind(this)
并且它有效。但我觉得它多余了。如果我必须这样做,我宁愿将方法定义为常规JS函数。我认为将它定义为类的方法会为我节省绑定。
所以,如果我将promise响应定义为类方法,为什么还需要绑定它?我错过了绑定怎么样?