从 try-catch 回调到链式调用:一种更优雅的 async/await 错误处理方案

一、问题背景:async/await 真的解决了一切麻烦吗?
在 async/await 普及之前,我们的异步代码通常是这样写的:
getUserInfo((err, user) => {
if (err) { showError(); return; }
getUserDetail(user.id, (err, detail) => {
if (err) { showError(); return; }
render(detail);
});
});
典型的回调地狱,阅读和维护成本都很高。
引入 async/await 后,代码变得线性、清晰:
async function loadUser() {
try {
const user = await getUserInfo();
const detail = await getUserDetail(user.id);
render(detail);
} catch (err) {
ElMessage.error('加载失败');
}
}
这已经比回调时代好太多了,但在实际开发中,我遇到了一些新的问题。
二、真实业务场景下的痛点
1. 错误需要'分阶段处理'
比如一组初始化页面的请求,当然也可以用 Promise.all() 或者 Promise.allSettled() 改写,这里不赘述。
() {
{
user = ();
order = (user.);
coupon = (order.);
({ user, order, coupon });
} (err) {
.();
}
}



