当前位置:首页 > 科技  > 软件

Async/Await 你是会用,但是你知道怎么处理错误吗?

来源: 责编: 时间:2024-04-08 17:22:50 231观看
导读前言大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心Promise封装请求大家平时如果使用Promise封装请求,那么当你使用这个请求函数的时候是这样的:// 封装请求函数const request

前言

大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心29f28资讯网——每日最新资讯28at.com

Promise封装请求

大家平时如果使用Promise封装请求,那么当你使用这个请求函数的时候是这样的:29f28资讯网——每日最新资讯28at.com

// 封装请求函数const request = (url, params) => {  return new Promise((resolve, reject) => {    // ...do something  })}// 使用时const handleLogin = () => {  request(    '/basic/login',    {      usename: 'sunshine',      password: '123456'    }  ).then(res => {    // success do something  }).catch(err => {    // fail do something  })}

可以看到,当你的请求成功时,会调用then方法,当你的请求失败时会调用catch方法。29f28资讯网——每日最新资讯28at.com

async/await

Promise的出现解决了很多问题,但是如果请求多了且有顺序要求的话,难免又会出现嵌套的问题,可读性较差,比如:29f28资讯网——每日最新资讯28at.com

const handleLogin = () => {  request(    '/basic/login',    {      usename: 'sunshine',      password: '123456'    }  ).then(res => {    // 登录成功后获取用户信息    request(      '/basic/getuserinfo',      res.id    ).then(info => {      this.userInfo = info    }).catch()  }).catch(err => {    // fail do something  })

所以这个时候async/await出现了,他的作用是:用同步的方式执行异步操作,上面的代码使用async/await的话可以改写成:29f28资讯网——每日最新资讯28at.com

const handleLogin = async () => {  const res = await request('/basic/login', {    usename: 'sunshine',    password: '123456'  })  const info = await request('/basic/getuserinfo', {    id: res.id  })  this.userInfo = info}

这样的话代码的可读性比较高,而不会出现刚刚的嵌套问题,但是现在又有一个问题了,Promise有catch这个错误回调来保证请求错误后该做什么操作,但是async/await该如何捕获错误呢?29f28资讯网——每日最新资讯28at.com

await-to-js

其实已经有一个库await-to-js已经帮我们做了这件事,我们可以看看它是怎么做的,它的源码只有短短十几行,我们应该读读它的源码,学学它的思想29f28资讯网——每日最新资讯28at.com

源码很简单

/** * @param { Promise } 传进去的请求函数 * @param { Object= } errorExt - 拓展错误对象 * @return { Promise } 返回一个Promise */export function to(  promise,  errorExt) {  return promise    .then(data => [null, data])    .catch(err => {      if (errorExt) {        const parsedError = Object.assign({}, err, errorExt)        return [parsedError, undefined]      }      return [err, undefined]    })}export default to

源码总结:to函数返回一个Promise且值是一个数组,数组之中有两个元素,如果索引为0的元素不为空值,说明该请求报错,如果索引0的元素为空值说明该请求没有报错,也就是成功。29f28资讯网——每日最新资讯28at.com

使用很简单

我们该怎么去使用这个to函数呢?其实很简单,还是刚刚的例子29f28资讯网——每日最新资讯28at.com

const handleLogin = async () => {  const [resErr, res] = await to(request('/basic/login', {    usename: 'sunshine',    password: '123456'  }))  if (resErr) {    // fail do somthing    return  }  const [userErr, info] = await to(request('/basic/getuserinfo', {    id: res.id  }))  if (userErr) {    // fail do somthing    return  }  this.userInfo = info}

所以说,偶尔看看一些库的源码,还是能学到东西的!!!29f28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-82043-0.htmlAsync/Await 你是会用,但是你知道怎么处理错误吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 一日一技:Setup.py里面的两个小技巧

下一篇: 阿里云卷到海外 核心云产品全线降价 23%!

标签:
  • 热门焦点
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 女孩租房开2小时空调用完100元电费引热议:5级能耗惹不起 月薪过万电费也交不起

    近日,江苏苏州一女孩租房当天充值了100元电费,开着空调不到2小时发现电费已用完。对于为什么这个快,房东表示,电表坏了这种情况很多,之前也遇到过,给租客换
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • 深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

    在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。近期
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top