SuperYan - 源码 https://www.hblyan.com/tag/%E6%BA%90%E7%A0%81/ 【解决方案 | 源码】await-to-js 优雅的处理 async await 错误 https://www.hblyan.com/archives/171.html 2023-07-19T15:35:00+08:00 背景:反复try catch 请求 handleError 很麻烦方案: await-to-js应用:简单处理await 等异步错误 ,它可以有效地帮助我们写出健壮的异步逻辑,降低异步编写成本源码解析传入参数 1、待执行的promise函数 2、额外的错误描述信息执行过程中:resolve成功状态下 直接返回 [null,data] data为promise成功的信息reject状态 catch 返回[error,undefined] 与额外错误信息 拼接后的 错误信息 返回出去调用时 则用 [err,data] 接收 处理 这两个参数即可/** * @param { Promise } promise * @param { Object= } errorExt - Additional Information you can pass to the err object * @return { Promise } */ export function to<T, U = Error> ( promise: Promise<T>, errorExt?: object ): Promise<[U, undefined] | [null, T]> { return promise .then<[null, T]>((data: T) => [null, data]) .catch<[U, undefined]>((err: U) => { if (errorExt) { const parsedError = Object.assign({}, err, errorExt); return [parsedError, undefined]; } return [err, undefined]; }); } export default to; 使用前其实这种方式 多了 还是 嵌套地狱const getDetail = async () => { try { let res = await getWorkOrderDetail('id') } catch (e) { console.log("e", e); message.error("获取详情失败!") } }使用后同层级 处理多个,解决地狱问题const [err, user] = await to(getWorkOrderDetail('id')); if(err) message.error("获取详情失败!")