为了更好地理解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);
});
我得到的输出是:
ggg
aaa
bbb
ggg
ggg
fff
ccc
good
ddd
undefined
如何最好地实施?
相关分类