byte-fe / intern-study

实习生互助学习
MIT License
33 stars 6 forks source link

promise的错误捕获 #21

Open deligent-ant opened 6 years ago

deligent-ant commented 6 years ago

promise的错误捕获

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

主要关键点:
问题的导入:
try{
Promoise.reject('我就是要报错!')
}catch(err){console.log(err)}

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

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


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是怎么处理错误的,后面在更新。