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

有大佬遇到过这个问题吗:Promise的done方法实现里面,setTimeout是什么作用?

有大佬遇到过这个问题吗:Promise的done方法实现里面,setTimeout是什么作用?

四季花海 2019-11-03 09:33:58
代码如下:Promise.prototype.done=function(onFulfilled,onRejected){this.then(onFulfilled,onRejected).catch(function(reason){//抛出一个全局错误setTimeout(()=>{throwreason},0);});};
查看完整描述

2 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

这个你要和catch函数一起理解,任何的catch实现都会包一层try-catch,如果你这里直接抛错误,就会直接被catch掉,不能抛出去,所以需要包一个settimeout来达到目的,至于为什么异步函数错误不会被当前try-catch捕捉,那是因为异步函数的实际上不在当前的执行队列里,而是会放在后面,所以当前的try-catch无法捕捉到。
                            
查看完整回答
反对 回复 2019-11-03
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

就是下一帧里再执行,因为即便倒计时是0或者缺省,它也要走setTimeout的流程,就是将任务加到等待队列,等主线程将当前事情执行结束再去检查等待队列。比如:
setTimeout(()=>{console.log(1)},0);console.log(2)
输出为:
2
1
                            
查看完整回答
反对 回复 2019-11-03
  • 2 回答
  • 0 关注
  • 352 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信