背景:反复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("获取详情失败!")