await-to-js 源码解析

32 阅读1分钟

await-to-js 是一个用于简化异步错误处理的小型JavaScript库。

1.函数定义

export function to<T, U = Error>(promise: Promise<T>, errorExt?: object): Promise<[U, undefined] | [null, T]> 

这个函数名为 to,它是一个泛型函数,接受一个类型为 Promise<T> 的参数 promise,其中 T 是 Promise 成功时返回的数据类型。它同时也接受一个可选的类型为 object 的参数 errorExt,用于在错误发生时提供额外的错误信息。函数的返回值是一个 Promise,其类型为 Promise<[U, undefined] | [null, T]>,即可以是 Promise 成功时的元组 [null, T],也可以是 Promise 失败时的元组 [U, undefined]

2.实现逻辑:

return promise
 .then<[null, T]>(data => [null, data])
 .catch<[U, undefined]>(err => {
    if (errorExt) {
      const parsedError = Object.assign({}, err, errorExt);
      return [parsedError, undefined];
    }

    return [err, undefined];
  });

在函数内部,使用 thencatch 来处理 Promise 的两种状态。then 用于捕捉成功时返回的数据,并将其映射到 [null, T] 的格式。catch 用于捕捉错误,并根据 errorExt 是否存在来决定如何返回错误信息。如果 errorExt 存在,它会创建一个包含原始错误信息和 errorExt 的新错误对象。