SuperYan - js
https://www.hblyan.com/tag/js/
-
【解决方案 | 源码】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("获取详情失败!")