try catch
来捕获代码错误,当代码内部发生错误时, 对于错误进行捕获, 可以防止代码的错误阻塞后续代码的执行,并且我们可以对于代码的错误进行后续处理;在 promise
中, 对于错误的处理或许稍有不同, 需要注意下面几点:- 使用
try catch
只能捕获同步代码, 不能捕获异步代码, 在async
函数内, 使用await
可以捕获异步代码,这里实际上是异步代码变成了同步代码 promise
内部代码的错误会沿着promise
代码链传递, 直到被promise
的catch
方法或者上一层async
函数内的try catch
方法捕获到, 如果没有使用catch
方法指定错误处理的回调函数,Promise
对象抛出的错误不会传递到外层的promise
;这个时候会报:UnhandledPromiseRejectionWarning:
try catch
处理async
函数内异步
使用 try catch
只能处理同步的代码, 对于异步代码中的代码错误, 使用 try catch
是无法捕获到的:1 | function promise() { |
async
函数内部使用 try catch
可以捕获到异步错误:1 | async function tryError() { |
promise.catch 错误捕获
使用 promise.catch
方法可以对于当前 promise
链上的代码进行错误捕获,当 promise
内部发生错误的时候, 错误会沿着 promise
链向后传递, 直到被 promise
后面的 catch
方法捕获到:1 | function apromise() { |
promise
链中没有 catch
方法的时候, promise
中发生的错误不会被上层的 promise
中的catch 捕获, 即使我们使用了 throw new Error
的方式对错误进行抛出也是如此;因为 async
函数返回一个 promise
对象, 我们在 async
函数内部定义一个 Error
1 | function promise() { |
总结
防止出现unhandledRejection
问题的解决方法是:- 在
async
函数内部使用try catch
捕获异步错误 -
promise
内部使用.catch
方法来捕获promise
内部代码错误