[英]what's wrong with my javascript promise code
我想自己实现一个JavaScript诺言以了解该机制,这是我的代码,但是它报告了未定义的错误,有人可以帮我看看吗?
var Promise = function(){
this.successesCallback = [];
}
Promise.prototype.then = function(success){
console.log("add success");
this.successesCallback.push(success);
}
var Defer = function(){
this.promise = new Promise();
}
Defer.prototype.resolve = function(){
console.log("defer resolve is calling");
console.log("2promise of defer:" + this.promise)
this.promise.successesCallback[0]();
}
var remoteCall = function(callBack){
for(var i = 0; i < 1000000000; i++){
}
callBack();
}
var callRemote = function(){
var defer = new Defer();
console.log("promise of defer:" + defer.promise)
console.log("set timer for remote call");
setTimeout(function(){remoteCall(defer.resolve)}, 0);
console.log("remote call is triggered");
return defer.promise;
}
callRemote().then(function(){console.log("Hello, server call done")});
您可以按节点运行
您将丢失setTimeout()
回调中的defer
和resolve()
之间的绑定。
一种解决方案是使用bind()
:
setTimeout(function(){remoteCall(defer.resolve.bind( defer )}, 0);
如另一个答案中所述,您将在setTimeout()
回调中丢失defer
和resolve()
之间的绑定。 现在,您可以使用()=>
而不是function()
来维护自ES6以来的当前绑定。
setTimeout(()=>{remoteCall(defer.resolve)}, 0);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.