背景:反复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("获取详情失败!")
Last modification:July 19, 2023
如果觉得我的文章对你有用,请随意赞赏