为了更好地理解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 如何最好地实施?
添加回答
举报
0/150
提交
取消