什么'我的javascript promise代码有问题

what's wrong with my javascript promise code

本文关键字:promise 代码 有问题 javascript 我的 什么      更新时间:2023-09-26

我想自己实现一个javascript promise来理解机制,这是我的代码,但它报告了未定义的错误,有人能帮我看看吗?

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()回调中丢失了deferresolve()之间的绑定。

一种解决方案是使用bind():

setTimeout(function(){remoteCall(defer.resolve.bind( defer )}, 0);

您在setTimeout()回调中丢失了deferresolve()之间的绑定,如另一个答案中所述。现在您可以使用()=>而不是function()来维护ES6之后的当前绑定。

setTimeout(()=>{remoteCall(defer.resolve)}, 0);