广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >使用async await处理错误方法示例
  • 674
分享到

使用async await处理错误方法示例

2024-04-02 19:04:59 674人浏览 安东尼
摘要

目录Promise封装请求async/awaitawait-to-js源码很简单使用很简单Promise封装请求 大家平时如果使用Promise封装请求,那么当你使用这个请求函数的时

Promise封装请求

大家平时如果使用Promise封装请求,那么当你使用这个请求函数的时候是这样的:

// 封装请求函数
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方法。

async/await

Promise的出现解决了很多问题,但是如果请求多了且有顺序要求的话,难免又会出现嵌套的问题,可读性较差,比如:

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的话可以改写成:

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该如何捕获错误呢?

await-to-js

其实已经有一个库await-to-js已经帮我们做了这件事,我们可以看看它是怎么做的,它的源码只有短短十几行,我们应该读读它的源码,学学它的思想

源码很简单


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的元素为空值说明该请求没有报错,也就是成功。

使用很简单

我们该怎么去使用这个to函数呢?其实很简单,还是刚刚的例子

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
}

所以说,偶尔看看一些库的源码,还是能学到东西的!!!

以上就是使用async await处理错误方法示例的详细内容,更多关于async await处理错误的资料请关注编程网其它相关文章!

--结束END--

本文标题: 使用async await处理错误方法示例

本文链接: https://www.lsjlt.com/news/153417.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作