functionpro(){returnnewPromise(resolve=>{resolve()})}functiona(){returnpro().then(res=>{setTimeout(()=>{console.log(1)},2000)})}functionb(){returnpro().then(res=>{console.log(2)})}functionc(){returnpro().then(res=>{console.log(3)})}a().then(b).then(c);//231最后的结果为什么不是123?这样返回Promise是正确的吗?
2 回答

梦里花落0921
TA贡献1772条经验 获得超6个赞
因为你a方法只是创建了一个定时器,并不代表这个定时器回调执行了。functiona(){returnpro().then(res=>{returnnewPromise((reslove)=>{setTimeout(()=>{console.log(1)reslove();},2000)})})}

不负相思意
TA贡献1777条经验 获得超10个赞
从语法上来说没啥错,但我觉得你想表达的应该是:functionpro(){returnnewPromise(resolve=>{resolve()})}functiona(){returnpro().then(res=>{returnnewPromise((resolve,reject)=>{setTimeout(()=>{console.log(1);resolve()},2000)})})}functionb(){returnpro().then(res=>{console.log(2)})}functionc(){returnpro().then(res=>{console.log(3)})}a().then(b).then(c);你的代码,a立即返回了一个resolved的promise,所以直接走了b,并没有等待。要按顺序输出,必须在setTimeout中resolve
添加回答
举报
0/150
提交
取消