返回顶部
首页 > 资讯 > 前端开发 > VUE >async/await中错误处理方法有哪些
  • 715
分享到

async/await中错误处理方法有哪些

2024-04-02 19:04:59 715人浏览 八月长安
摘要

这篇文章主要介绍了async/await中错误处理方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。async/await优雅的错误处

这篇文章主要介绍了async/await中错误处理方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

async/await优雅的错误处理

一般情况下 async/await 在错误处理方面,主要使用 try/catch,像这样

const fetchData = () => {
 return new Promise((resolve, reject) => {
  setTimeout(() => {
   resolve('fetch data is me')
  }, 1000)
 })
}

(async () => {
 try {
  const data = await fetchData()
  console.log('data is ->', data)
 } catch(err) {
  console.log('err is ->', err)
 }
})()

这么看,感觉倒是没什么问题,如果是这样呢?有多个异步操作,需要对每个异步返回的 error 错误状态进行不同的处理,以下是示例代码

const fetchDataA = () => {
 return new Promise((resolve, reject) => {
  setTimeout(() => {
   resolve('fetch data is A')
  }, 1000)
 })
}

const fetchDataB = () => {
 return new Promise((resolve, reject) => {
  setTimeout(() => {
   resolve('fetch data is B')
  }, 1000)
 })
}

const fetchDataC = () => {
 return new Promise((resolve, reject) => {
  setTimeout(() => {
   resolve('fetch data is C')
  }, 1000)
 })
}

(async () => {
 try {
  const dataA = await fetchDataA()
  console.log('dataA is ->', dataA)
 } catch(err) {
  console.log('err is ->', err)
 }

 try {
  const dataB = await fetchDataB()
  console.log('dataB is ->', dataB)
 } catch(err) {
  console.log('err is ->', err)
 }

 try {
  const dataC = await fetchDataC()
  console.log('dataC is ->', dataC)
 } catch(err) {
  console.log('err is ->', err)
 }
})()

这样写代码里充斥着 try/catch,有代码洁癖的你能忍受的了吗?这时可能会想到只用一个 try/catch。

// ... 这里 fetch 函数省略

(async () => {
 try {
  const dataA = await fetchDataA()
  console.log('dataA is ->', dataA)
  const dataB = await fetchDataB()
  console.log('dataB is ->', dataB)
  const dataC = await fetchDataC()
  console.log('dataC is ->', dataC)
 } catch(err) {
  console.log('err is ->', err)
  // 难道要定义 err 类型,然后判断吗??
  
 }
})()

如果是这样写只会增加编码的复杂度,而且要多写代码,这个时候就应该想想怎么优雅的解决,async/await 本质就是 promise 的语法糖,既然是 promise 那么就可以使用 then 函数了

(async () => {
 const fetchData = () => {
  return new Promise((resolve, reject) => {
   setTimeout(() => {
    resolve('fetch data is me')
   }, 1000)
  })
 }

 const data = await fetchData().then(data => data ).catch(err => err)
 console.log(data)
})()

在上面写法中,如果 fetchData 返回 resolve 正确结果时,data 是我们要的结果,如果是 reject 了,发生错误了,那么 data 是错误结果,这显然是行不通的,再对其完善。

(async () => {
 const fetchData = () => {
  return new Promise((resolve, reject) => {
   setTimeout(() => {
    resolve('fetch data is me')
   }, 1000)
  })
 }

 const [err, data] = await fetchData().then(data => [null, data] ).catch(err => [err, null])
 console.log('err', err)
 console.log('data', data)
 // err null
 // data fetch data is me
})()

这样是不是好很多了呢,但是问题又来了,不能每个 await 都写这么长,写着也不方便也不优雅,再优化一下

(async () => {
 const fetchData = () => {
  return new Promise((resolve, reject) => {
   setTimeout(() => {
    resolve('fetch data is me')
   }, 1000)
  })
 }

 // 抽离成公共方法
 const awaitWrap = (promise) => {
  return promise
   .then(data => [null, data])
   .catch(err => [err, null])
 }

 const [err, data] = await awaitWrap(fetchData())
 console.log('err', err)
 console.log('data', data)
 // err null
 // data fetch data is me
})()

将对 await 处理的方法抽离成公共的方法,在使用 await 调用 awaitWrap 这样的方法是不是更优雅了呢。如果使用 typescript 实现大概是这个样子

function awaitWrap<T, U = any>(promise: Promise<T>): Promise<[U | null, T | null]> {
 return promise
  .then<[null, T]>((data: T) => [null, data])
  .catch<[U, null]>(err => [err, null])
}

感谢你能够认真阅读完这篇文章,希望小编分享的“async/await中错误处理方法有哪些”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网VUE频道,更多相关知识等着你来学习!

--结束END--

本文标题: async/await中错误处理方法有哪些

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

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

猜你喜欢
  • async/await中错误处理方法有哪些
    这篇文章主要介绍了async/await中错误处理方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。async/await优雅的错误处...
    99+
    2024-04-02
  • 使用async await处理错误方法示例
    目录Promise封装请求async/awaitawait-to-js源码很简单使用很简单Promise封装请求 大家平时如果使用Promise封装请求,那么当你使用这个请求函数的时...
    99+
    2024-04-02
  • JavaScript中async await更优雅的错误处理方式
    目录背景 为什么要错误处理 async await 更优雅的错误处理 小结 总结背景 团队来了新的小伙伴,发现我们的团队代码规范中,要给 async  await 添加 ...
    99+
    2024-04-02
  • 如何使用async await处理错误
    这篇文章主要介绍“如何使用async await处理错误”,在日常操作中,相信很多人在如何使用async await处理错误问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用async...
    99+
    2023-07-02
  • es6中await和async有哪些作用
    今天小编给大家分享一下es6中await和async有哪些作用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
    99+
    2024-04-02
  • await/async无法捕获与处理错误信息的解决方案分享
    目录前言同步和异步异步任务所存在的问题Promise如何解决回调地狱async/await,回调地狱的最终方案async/await错误处理方案第一种,手动添加啊try{}catch...
    99+
    2023-02-03
    async await捕获错误 async await错误处理 async await用法
  • mybatis错误处理的方法有哪些
    MyBatis 提供了以下几种错误处理的方法:1. 异常映射:MyBatis 可以将底层数据库访问引发的异常映射为应用程序定义的异常...
    99+
    2023-09-13
    mybatis
  • java错误处理的方法有哪些
    Java错误处理的方法有以下几种:1. 异常捕获和处理:使用try-catch语句来捕获和处理异常。在try块中编写可能抛出异常的代...
    99+
    2023-08-26
    java
  • python错误处理的方法有哪些
    在Python中,常用的错误处理方法有以下几种: try-except语句:用于捕获和处理异常。代码放在try代码块中执行,如果...
    99+
    2023-10-26
    python
  • NodeJs通过async/await处理异步的方法
    场景 远古时代 我们在编写express后台,经常要有许多异步IO的处理。在远古时代,我们都是用chunk函数处理,也就是我们最熟悉的那种默认第一个参数是error的函数。我们来模拟一个Mongo数据库的操...
    99+
    2022-06-04
    方法 NodeJs async
  • Javascript中async与await的捕捉错误怎么理解
    这篇文章主要介绍“Javascript中async与await的捕捉错误怎么理解”,在日常操作中,相信很多人在Javascript中async与await的捕捉错误怎么理解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-06-29
  • Golang中的错误处理方式有哪些
    这篇文章主要讲解了“Golang中的错误处理方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang中的错误处理方式有哪些”吧!错误类型在Golang中,错误类型是错误处理的基本...
    99+
    2023-07-06
  • Go语言的错误处理方法有哪些
    这篇文章主要介绍了Go语言的错误处理方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言的错误处理方法有哪些文章都会有所收获,下面我们一起来看看吧。与其他语言的快速比较在 Go 中,所有的错误都是值...
    99+
    2023-06-17
  • go语言错误处理的方法有哪些
    Go语言中的错误处理方法有以下几种:1. 返回错误值:函数可以返回一个额外的错误值,通常是一个error类型的值,用于表示函数执行过...
    99+
    2023-08-15
    go语言
  • Bash脚本中处理错误的常用方法有哪些
    这篇文章主要为大家分析了Bash脚本中处理错误的常用方法有哪些的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Bash脚本中处理错误的常用方法有哪些”的知识吧...
    99+
    2023-06-28
  • Angular中常用的错误处理方式有哪些
    本篇内容主要讲解“Angular中常用的错误处理方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Angular中常用的错误处理方式有哪些”吧!什么是An...
    99+
    2024-04-02
  • Python中错误处理的原则有哪些
    这篇文章给大家介绍Python中错误处理的原则有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。错误绝不应该悄悄传递...Errors should never pass silently&hellip;当 ...
    99+
    2023-06-15
  • Python中的异常处理和错误类型有哪些?
    Python中的异常处理和错误类型有哪些?Python是一种非常流行的编程语言,它提供了强大的异常处理机制,使得开发人员能够更好地控制和处理代码中可能出现的错误。在Python中,异常是指代码执行过程中可能遇到的问题或错误,而异常处理则是一...
    99+
    2023-10-22
    Python 异常处理 错误类型
  • C++ 函数错误处理中常见陷阱有哪些?
    c++++ 函数错误处理的常见陷阱包括:过度使用异常跳过错误检查释放资源不当不检查函数参数的有效性忽略警告将错误混入数据避免这些陷阱可确保编写可靠、可维护的 c++ 代码。 C++ 函...
    99+
    2024-04-23
    c++ 错误处理
  • java中HttpClient的错误处理方法
    这篇“java中HttpClient的错误处理方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java中HttpClien...
    99+
    2023-06-30
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作