【若川视野 x 源码共读】第21期 | await-to-js 如何优雅的捕获 await 的错误

84 阅读1分钟

本文参加了由公众号@若川视野 发起的每周源码共读活动,点击了解详情一起参与。

学习目标

  1. 如何学习调试源码
  2. await-to-js 使用和原理

环境准备

git clone https://github.com/scopsy/await-to-js.git

await-to-js源码

/**
 * @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;

源码很容易理解,通过ES6的Promise语法将原有的异步调用封装一层。通过一层包装后,单独返回成功的执行和错误的执行。 更多案例可以参考官方demo

总结

合理的使用Promise语法,可以解决异步调用的作用域问题。