Javascript 这是实现承诺的可行方法吗

Javascript 这是实现承诺的可行方法吗,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,我正在尝试编写自己的承诺/A+合规承诺实施 下面是第二次(不完整)尝试 这看起来像是一个在我进一步开发时仍然可行的实现吗 const uninitializedOpending=p=>{ p[“状态”]=“待定”; p[''已解决]=false; } 常数pendingToFulfilled=(p,result)=>{ p[“状态”]=“已完成”; p[''已解决]=真; p[''结果]=结果; } const pendingToRejected=(p,reason)=>{ p[“状态”]=“

我正在尝试编写自己的承诺/A+合规承诺实施

下面是第二次(不完整)尝试

这看起来像是一个在我进一步开发时仍然可行的实现吗

const uninitializedOpending=p=>{
p[“状态”]=“待定”;
p[''已解决]=false;
}
常数pendingToFulfilled=(p,result)=>{
p[“状态”]=“已完成”;
p[''已解决]=真;
p[''结果]=结果;
}
const pendingToRejected=(p,reason)=>{
p[“状态”]=“已拒绝”;
p[''已解决]=真;
p[''结果]=原因;
}
const go=async(函数(然后,结果){
while(然后是长度){
thens.pop()(结果);
}
});
函数异步(cb){
return(…args)=>setTimeout(()=>cb(…args));
}
var-id=0;
函数承诺(executor=()=>{}){
常数thens=[]
,渔获量=[];
常数p={
id:++id,
那么,
捕获:ccatch,
决定
拒绝
};
未初始化开放(p);
执行人(决议、拒绝);
返回p;
函数解析(结果){
pendingToFulfilled(p,结果);
去(然后,结果);
}
功能拒绝(原因){
pendingToRejected(p,原因);
去(捕捉、推理);
}
功能然后(cb){
const p2=新承诺();
然后取消移位(结果=>{
const result2=cb(结果);
if(result2&&result2.then){
p2[“已解决”]=真;
结果2.然后((结果)=>{
p2.解决(结果);
返回结果;
}
);
返回;
}
p2.解决(结果2)
}
);
返回p2;
}
功能ccatch(cb){
const p2=新承诺();
捕获。取消移动(原因=>{
cb(理性);
p2.拒绝(理由);
}
);
返回p2;
}
}
//“测试”
const p=新承诺(()=>{});//悬而未决
const q=新承诺(resolve=>resolve('foo'));//已解决、已实现、价值:foo
const r=新承诺((uu,拒绝)=>拒绝('foo');//已解决,拒绝,原因:foo
const s=新承诺(resolve=>resolve('foo'))。然后(result=>result+'foo');//决心、成就、价值:“foo foo”
const t=newpromise(resolve=>resolve('foo'))。然后(result=>result+'foo')。然后(result=>result+'foo');//解决、履行、价值:“foo foo foo”
const u=newpromise(resolve=>resolve('foo'))。然后(result=>newpromise(resolve=>resolve(result+'foo'));//决心、成就、价值:“foo foo”
const v=新承诺(resolve=>resolve('foo'))。然后(result=>newpromise(resolve=>resolve(result+'foo'))。然后(result=>result+'foo');//解决、履行、价值:“foo foo foo”
const w=新承诺(resolve=>resolve('foo');
//分支:
w、 然后(result=>a')。然后(console.log);

w、 然后(result=>'b')。然后(console.log)它仍然缺少很多,但是你可以用它作为基础。首先给出
然后
第二个参数“onrejected”,然后从构造函数中删除
catch
——用
然后
的方式实现它。它仍然缺少很多,但是你可以以此为基础。首先给出
然后
第二个参数“onrejected”,然后从构造函数中删除
catch
——根据
然后
实现它。