fail方法捕捉throw

promise的catch大家都知道使用来捕捉异常的,先看看下面代码的运行结果:

大家是不是以为输出catch?然而并不是。其实then的第二个方法和catch方法作用是差不多的:

background Layer 1 success fail catch 可以捕捉throw和reject 可以捕捉throw和reject

then和catch的工作就像一个流水线,其中的fail方法和catch方法都可以捕捉throw和reject方法,因此这里输出的是reject(fail方法捕捉到throw就不会继续执行了)。当然了,正常是不建议这种写法,因为fail方法会捕捉到throw事件,这样后面的catch就不会执行了。

catch方法捕捉reject

同理,catch也是可以捕捉reject:

Promise错误不阻塞

Promise的报错和普通的报错不同的是,它不会阻塞代码的执行。一般情况下,如果发生了报错没被捕捉的话,后面的代码就不会运行。

throw和reject区别

throw和reject都可被fail和catch方法捕捉,主要区别是throw不能用在异步中,而reject可以:

这个主要涉及到事件循环了,因为throw被安排在下一次循环执行,外层的fail方法在上一次循环已经执行并且没有捕捉到任何错误。所以当throw执行的时候,是没有try{}catch{}可以捕获到的。

我们可以看一个更一般的异步报错的例子:

这种异步错误是无法捕捉到的,最好的办法就是在异步报错内包一个try{}catch{}:

其他文章

0
我要评论

评论

返回
×

我要评论

回复:

昵称:(昵称不超过20个字)

图片:

提交
还可以输入500个字