async/await如何优雅捕获错误
await Promise对象.catch(e=>{…})
// 捕获下面Promise.reject未处理的报错,防止出现在控制台
window.addEventListener("unhandledrejection", (e) => {
e.preventDefault();
console.log("捕获了", e); // 会执行
});
//
function p() {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject(123);
}, 1000);
});
}
const handle = async () => {
const result = await p().catch((err) => {
alert(err);
return Promise.reject(err);
});
console.log(result); // 不会执行
};
handle();
要点是catch函数里必须return一个reject的Promise,这样才能阻止代码继续执行。当然,也可以throw new Error(err),都行。
优点:
全原生。
不存在变量作用域烦恼。
缺点:
必须用全局捕获才能阻止错误出现在控制台