首页 前端知识 优美的await-to-js

优美的await-to-js

2024-06-19 23:06:43 前端知识 前端哥 748 801 我要收藏

一、前景

目前async await可以精简的解决回调地狱问题,但是使用时需要用 try + catch 来捕获错误,这样代码看起来依旧是有点繁琐,await-to-js恰好可以解决这一问题

二、使用对比

  • async await写法
async function getList(){
    try{
        const res = await requestFunc()
        ......
    }catch(err){
    ......
    }
}
  • await-to-js写法
import to from 'await-to-js';
async function getList(){
    const [err res] = await to(requestFunc())
    if(err){
        throw new Error(err)
    }
    ......
}

三、源码分析

  • 源码链接:https://github.com/scopsy/await-to-js
  • 源码核心:
//入参有2个,异步的promise和自定义错误信息errorExt
//返回promisse数组,数组两个元素,第一个是catch的错误信息,第二个是异步回调then的结果
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;
  • 代码逻辑:
  1. 无论成功还是失败都会返回一个promise,promise里返回的是一个数组,第一个元素是错误信息,第二个元素正确结果
  2. 成功:第一个元素为null
  3. 失败:第二个元素为undefined
  4. 第二个入参errorExt是自定义错误信息,必须是object,失败时会拼接catch的错误信息一起返回
转载请注明出处或者链接地址:https://www.qianduange.cn//article/12867.html
标签
评论
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!