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

请各位大佬指点!用Promise封装了一个方法A,然后另一个方法B去调用这个封装的A方法,那么B方法怎么返回一个Promise对象?

请各位大佬指点!用Promise封装了一个方法A,然后另一个方法B去调用这个封装的A方法,那么B方法怎么返回一个Promise对象?

慕田峪7331174 2019-08-21 18:49:14
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)
})
})
}
                            
查看完整回答
反对 回复 2019-08-21
?
不负相思意

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
                            
查看完整回答
反对 回复 2019-08-21
  • 2 回答
  • 0 关注
  • 735 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号