await-to-js 源码解读

1. 前言

本文参加了由公众号@若川视野 发起的每周源码共读活动,点击了解详情一起参与。 **这是源码共读的第21期,链接:juejin.cn/post/708310...

2. await-to-js库了解

通过await-to-js库,就可以在使用async 和await的时候轻松处理错误信息

如下示例

javascript 复制代码
import to from 'await-to-js';
async function test() {
  // 1. try...catch捕获错误
  try{
    const user = await UserModel.findById(1);
  }catch(e) {
    return cb('No user found');
  }

  // 2使用Promise.catch捕获错误
  const res = await UserModel.findById(1).catch((e) => {
    return cb('No user found');
  });


  // 3. 使用to函数捕获错误
  const [err, user] = await to(UserModel.findById(1));
  if(!user) return cb('No user found');
}

3. 源码解析

源码就封装了一个to方法, 统一处理 Promise 的成功和失败情况

  • 如果 Promise 成功解析(resolved) ,返回 [null, data],其中 data 是解析的值。
  • 如果 Promise 被拒绝(rejected) ,返回 [error, undefined],其中 error 是捕获的错误

这样我们就方便获取err啦~

typescript 复制代码
/**
 * @param { Promise } 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])  // resolved后,err就为null返回
    .catch<[U, undefined]>((err: U) => {
      if (errorExt) {
        const parsedError = Object.assign({}, err, errorExt); // 合并错误信息errorExt
        return [parsedError, undefined]; // 返回[parsedError, undefined]
      }

      return [err, undefined]; // 直接返回[err, undefined]
    });
}

export default to;

4. 总结

虽然是小小的一个封装,但是用处极大

相关推荐
张拭心1 分钟前
为什么说 AI 视频模型不能用来做教育?Sora-2 Veo-3 来了也不行
前端·人工智能
lvchaoq32 分钟前
页面停留时间过长导致token过期问题
前端
elangyipi12336 分钟前
深入理解前端项目中的 package.json 和 package-lock.json
前端·json
LYFlied1 小时前
【算法解题模板】-【回溯】----“试错式”问题解决利器
前端·数据结构·算法·leetcode·面试·职场和发展
composurext1 小时前
录音切片上传
前端·javascript·css
程序员小寒1 小时前
前端高频面试题:深拷贝和浅拷贝的区别?
前端·javascript·面试
狮子座的男孩1 小时前
html+css基础:07、css2的复合选择器_伪类选择器(概念、动态伪类、结构伪类(核心)、否定伪类、UI伪类、目标伪类、语言伪类)及伪元素选择器
前端·css·经验分享·html·伪类选择器·伪元素选择器·结构伪类
zhougl9961 小时前
Vue 中的 `render` 函数
前端·javascript·vue.js
听风吟丶1 小时前
Spring Boot 自动配置深度解析:原理、实战与源码追踪
前端·bootstrap·html
跟着珅聪学java1 小时前
HTML中设置<select>下拉框默认值的详细教程
开发语言·前端·javascript