为了账号安全,请及时绑定邮箱和手机立即绑定

基本Javascript承诺实现尝试

基本Javascript承诺实现尝试

肥皂起泡泡 2019-11-23 10:48:07
为了更好地理解Promise如何在Javascript中工作,我决定自己尝试一下并编写基本的实现。基本上,我想实现以函数为参数的Promises对象(在我的代码中称为Aaa)。此函数可以调用resolve对承诺的解决,也可以拒绝reject。基本实现和用法如下。不知道第二个参数是否可以按照promise规范接受,但这就是我到目前为止所得到的。Aaa=function(f,pause) {     console.log("ggg");    var t=this;    this.f=f;    this.thens=[];    this.resolve=function(g) {        for(var i=0;i<t.thens.length;i++)        {            // try/catch to be used later for dealing with exceptions            try            {                t.thens[i].f(g);                t.thens[i].resolve();            }               catch(ex)            {}        }    };      // to be implemented later    this.reject=function(g) {};    this.then=function(resolve,reject) {        // i'm passing true for pause argument as we dont need to execute promise code just yet        var nextPromise=new Aaa(resolve,true);        this.thens.push(nextPromise);        return nextPromise;    }    if(!pause)        this.f(this.resolve,this.reject); }var aaa=new Aaa(function(resolve,reject) {    console.log("aaa");    setTimeout(function() {        console.log("fff");        resolve("good");    },2000);    console.log("bbb");});因此,现在可以创建,调用和解决承诺。每个then方法将返回新的Aaa(承诺),因此可以将它们链接在一起。现在,下面的代码使用上面创建的promise并链接then回调。每个then返回新的诺言,在这种情况下,它似乎可以正常工作:aaa.then(function(res) {    console.log("ccc");    console.log(res);}).then(function(res) {    console.log("ddd");    console.log(res);},function(rej) {    console.log("eee");    console.log(rej);});我得到的输出是:gggaaa bbb ggg ggg fff ccc good ddd undefined 如何最好地实施?
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 413 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信