Open deligent-ant opened 6 years ago
起源于一个问题:promise的错误能不能被外层的try catch捕获?
try{ Promoise.reject('我就是要报错!') }catch(err){console.log(err)} try{ await Promoise.reject('我就是要报错!') }catch(err){console.log(err)}
第一个是没办法捕获到这个错误的,而第2个是可以的。
catch 是 .then(null, rejection)的别名,用于指定发生错误时的回调函数。 一旦catch前面的任何一个Promise发生异常,都会被catch捕获,包括Promise函数创建的Promise,还有.then返回的Promise,甚至catch前面如果还有一个catch在这个catch抛出的异常也会被后一个catch捕获。
catch 是 .then(null, rejection)的别名,用于指定发生错误时的回调函数。
所以常常见到下面这个写法:
promise.then().catch() promise.then().then().catch() promise.then().then().catch().then().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是怎么处理错误的,后面在更新。
promise的错误捕获
起源于一个问题:promise的错误能不能被外层的try catch捕获?
主要关键点:
问题的导入:
第一个是没办法捕获到这个错误的,而第2个是可以的。
promise自带的catch方法
所以常常见到下面这个写法:
await与try catch
第一个await出错,错误给后面的catch。async函数直接结束,后面的await就不会执行。 如果想在第一个await出错时候,后面的await还执行,可以在第一个await外层套一个try catch。