代码如下: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无法捕捉到。

一只斗牛犬
TA贡献1784条经验 获得超2个赞
就是下一帧里再执行,因为即便倒计时是0或者缺省,它也要走setTimeout的流程,就是将任务加到等待队列,等主线程将当前事情执行结束再去检查等待队列。比如:setTimeout(()=>{console.log(1)},0);console.log(2)输出为:21
添加回答
举报
0/150
提交
取消