异常处理
2023年06月17日
一、认识
async/await
的异常机制为:
-
async
函数内部抛出错误,会导致返回的Promise
对象变为reject
状态。抛出的错误对象会被catch
方法回调函数接收到。整个async
函数都会中断执行 -
如果
await
后面的异步操作出错,那么等同于async
函数返回的Promise
对象被reject
, 整个async
函数都会中断执行
二、捕获
2.1 async await Promise.reject()
任何一个await
语句后面的 Promise
对象变为reject
状态,那么整个async
函数都会中断执行。
async function foo() {
await Promise.reject("失败");
console.log("失败的下一句"); // 不执行
}
foo().catch((error) => {
console.log("async error", error);
});
2.2 async await new Promise(()=> { throw new Error()})
async function foo() {
await new Promise((resolve, reject) => {
throw new Error("失败");
});
console.log("失败的下一句"); // 不执行
}
foo().catch((error) => {
console.log("async error", error);
});
三、处理
3.1 try……catch
await
命令后面的Promise
对象,运行结果可能是rejected
,所以最好把await
命令放在try...catch
代码块中。
async function foo() {
try {
await new Promise((resolve, reject) => {
throw new Error("失败");
});
} catch (error) {}
console.log("失败的下一句");
}
foo().catch((error) => {
console.log("async error", error);
});
3.2 await new Promise.then().catch()
await
命令后面的Promise
对象,运行结果可能是rejected
,所以也可以对每一个 await
后面的 Promise
对象注册失败回调。
async function foo() {
await new Promise((resolve, reject) => {
throw new Error("失败");
}).catch((error) => {
console.log("promise error", error);
});
console.log("失败的下一句");
}
foo().catch((error) => {
console.log("async error", error);
});