0
点赞
收藏
分享

微信扫一扫

await-to-js的源码分析

何以至千里 2022-01-10 阅读 9
  • 第一步:clone源码
  • 分析源码目录结构
  - examples
  | - examples-1.js
  - src
  |- await-to-js.ts
  - test
  |- await-to-js.ts
  - tools // 代码打包发布脚本
  |- gh-pages-publish.ts
  |- semantic-release-prepare.ts
  - README.md
  - package.json
  - rollup.config.js // 代码打包文件
  ...
  • 根据package.json,进行包的安装,yarn
  • 通过这个src目录只有一个文件,await-to-js.ts,接下来看看该文件内部怎么写的吧
  1. 解决的一个问题,避免try-catch去抓取错误,使得代码看起来不够优雅,从源码来看,提供一个to方法,基于Promise的一次封装;公有两个参数,一个是promise对象为必填参数,另外一个为errorExt错误配置参数,可选值
  2. then方法后,resole()后成功值,放回的一个成功数组。
  3. catch方法,reject()错误值,返回的一个错误数组。
    • 判断errorExt存在,将errorExt和err进行合并返回。
    • 反之,直接返回[err, undefined]
  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];
      });
  }

参考资料

  • 源码文档
  • rollup.config.js
举报

相关推荐

0 条评论