承诺实际自我实现
Promise Practical Self-Implement
我想将数据传递给 then
方法,但是当我通过给它 this.passedResolve
来做到这一点时,它会得到 undefined
function Promises(callback){
if(callback){
callback(Promises.prototype.resolve, Promises.prototype.reject);
}
}
Promises.prototype.resolve = function(data){
this.passedResolve = data;
}
Promises.prototype.reject = function(err){
console.log(new Error(err));
}
Promises.prototype.thens = function(cb){
cb(this.passedResolve);
}
function loadImg(url){
return new Promises(function(resolve, reject){
var el = new Image()
el.onload = function(){
resolve(el)
}
el.onerror = function(){
reject('Error')
};
el.src = url;
})
}
loadImg('https://s-media-cache-ak0.pinimg.com/736x/12/64/da/1264da4a3f18207dc22592102abae40d.jpg').thens(function(e){
console.log(e)
})
var x = new Promises()
console.log(x)
这是因为局部 this
变量超出了作用域。您需要将其绑定到当前实例。
function Promises(callback){
if(callback){
callback(Promises.prototype.resolve.bind(this), Promises.prototype.reject.bind(this));
}
}
否则,passedResolve
函数将被赋值给另一个对象。所以当 Promises
想要它时,它会得到 undefined
。我希望这是有道理的。
JavaScript 如您所见,对象到处都有一些怪癖。
我想将数据传递给 then
方法,但是当我通过给它 this.passedResolve
来做到这一点时,它会得到 undefined
function Promises(callback){
if(callback){
callback(Promises.prototype.resolve, Promises.prototype.reject);
}
}
Promises.prototype.resolve = function(data){
this.passedResolve = data;
}
Promises.prototype.reject = function(err){
console.log(new Error(err));
}
Promises.prototype.thens = function(cb){
cb(this.passedResolve);
}
function loadImg(url){
return new Promises(function(resolve, reject){
var el = new Image()
el.onload = function(){
resolve(el)
}
el.onerror = function(){
reject('Error')
};
el.src = url;
})
}
loadImg('https://s-media-cache-ak0.pinimg.com/736x/12/64/da/1264da4a3f18207dc22592102abae40d.jpg').thens(function(e){
console.log(e)
})
var x = new Promises()
console.log(x)
这是因为局部 this
变量超出了作用域。您需要将其绑定到当前实例。
function Promises(callback){
if(callback){
callback(Promises.prototype.resolve.bind(this), Promises.prototype.reject.bind(this));
}
}
否则,passedResolve
函数将被赋值给另一个对象。所以当 Promises
想要它时,它会得到 undefined
。我希望这是有道理的。
JavaScript 如您所见,对象到处都有一些怪癖。