跳到主要内容

异常处理

2023年06月17日
柏拉文
越努力,越幸运

一、认识


async/await 的异常机制为:

  1. async函数内部抛出错误,会导致返回的 Promise 对象变为reject状态。抛出的错误对象会被catch方法回调函数接收到。整个 async 函数都会中断执行

  2. 如果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);
});