当我在Promise上调用
是否有任何方法可以设置
实现链式调用
我不明白为什么有人会把"接收器"函数绑定到窗口,这对我来说毫无意义,因为承诺应该类似于同步调用。
resolve()
时,then()
内部的函数绑定到window
作用域。是否有任何方法可以设置
this
的上下文,例如使用Function.apply方法?
function Point(){
var that = this;
var _x = 0;
this.setX = function(x){
return new Promise((resolve, reject)=>{
setTimeout(()=>{
_x = x;
resolve.apply(that); //<== set this
}, 1000);
});
}
this.getX = function(){
return _x;
}
}
var p = new Point();
p.setX(10).then(function(){
console.log(this.getX()); //this === `window`
});
编辑:
详细说明,使用同步代码可以进行方法链接,只需一遍又一遍地返回相同的对象。
//this pattern
obj.method1();
obj.method2();
...
//becomes this pattern
obj.method1(10).method2(11) ...
实现链式调用
method1 = function(x){
return this;
}
当涉及到异步操作时,您仍可以使用回调函数完成相同的操作。
obj.method1(10, function(){ this.method2(11, function(){ ...
使用回调函数的实现
method1 = function(x, cb){
cb.apply(this);
}
我不明白为什么有人会把"接收器"函数绑定到窗口,这对我来说毫无意义,因为承诺应该类似于同步调用。
this
)上下文”或“接收器”,而不是“(变量)作用域”。而且,不能设置它。 - Bergi.then()
。 - Josué Zatarain