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

代码如下:
Promise.prototype.done=function(onFulfilled,onRejected){
this.then(onFulfilled,onRejected)
.catch(function(reason){
//抛出一个全局错误
setTimeout(()=>{throwreason},0);
});
};
四季花海
浏览 353回答 2
2回答

江户川乱折腾

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

一只斗牛犬

就是下一帧里再执行,因为即便倒计时是0或者缺省,它也要走setTimeout的流程,就是将任务加到等待队列,等主线程将当前事情执行结束再去检查等待队列。比如:setTimeout(()=>{console.log(1)},0);console.log(2)输出为:21
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript