从 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() 改写,这里不赘述。
async () {
{
user = ()
order = (user.)
coupon = (order.)
({ user, order, coupon })
} (err) {
.()
}
}



