Q承诺的范围如何运作?据我所知,"然后"由window调用,就像setTimeout一样。
在这个例子中(只是一个了解其工作原理的例子):
var getFileText = function() {
var deferred = Q.defer();
Server.readFile("foo.txt", "utf-8", function (error, text) {
if (error) {
deferred.reject(new Error(error));
} else {
deferred.resolve(text);
}
});
return deferred.promise;
};
var Foo = function () {
getFileText().then(this.showFile);
};
Foo.prototype.showFile = function(text) {
this.text = text;
console.log(text);
};
var foo = new Foo();
要使用bind:
将文本放在foo的实例中var Foo = function () {
getFileText().then(this.showFile.bind(this));
};
还有其他办法吗?
答案 0 :(得分:8)
Q承诺的范围如何运作?
您正在寻找上下文。
我知道"然后"的回调。由窗口调用
嗯, on 全球背景,是的。使用undefined
作为thisArg
来调用is specified。
我使用bind。还有其他办法吗?
只有冗长的,带有引用实例的变量:
var that = this;
getFileText().then(function(text) {
that.text = text;
// or even longer:
// that.showFile(text);
});