Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

promise的错误捕获 #21

Open
deligent-ant opened this issue Jul 11, 2018 · 0 comments
Open

promise的错误捕获 #21

deligent-ant opened this issue Jul 11, 2018 · 0 comments

Comments

@deligent-ant
Copy link
Contributor

promise的错误捕获

起源于一个问题:promise的错误能不能被外层的try catch捕获?

主要关键点:
  • try catch是同步捕获错误的
  • promise异步执行,microwork的一种
  • await 可以捕获错误
  • promise自带的catch方法
  • await与try catch
问题的导入:
try{
Promoise.reject('我就是要报错!')
}catch(err){console.log(err)}

try{
await Promoise.reject('我就是要报错!')
}catch(err){console.log(err)}

第一个是没办法捕获到这个错误的,而第2个是可以的。


  • 第一个因为try catch是同步执行的,在promise还没状态改变时就已经运行完毕了,所以不能在捕获错误了。
  • 第二个 await后面加的一个promise会等待promise运行结果,有报错有catch这个错误,然后throw出来给外层。

promise自带的catch方法

catch 是 .then(null, rejection)的别名,用于指定发生错误时的回调函数。

  • 一旦catch前面的任何一个Promise发生异常,都会被catch捕获,包括Promise函数创建的Promise,还有.then返回的Promise,甚至catch前面如果还有一个catch在这个catch抛出的异常也会被后一个catch捕获。

所以常常见到下面这个写法:

promise.then().catch()
promise.then().then().catch()
promise.then().then().catch().then().catch()

await与try catch

async function tryPromise(){
await Promise.reject('错误')
await Promise.resolve('输出')
return
}
try{
await tryPromsie()}catch(err){
}

第一个await出错,错误给后面的catch。async函数直接结束,后面的await就不会执行。
如果想在第一个await出错时候,后面的await还执行,可以在第一个await外层套一个try catch。

后面再看看await是怎么处理错误的,后面在更新。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant