Refer to await to JS to write an await error handling

nameIsZoe27 2021-05-03 19:19:27
refer await js write await


I came across a await Third party error handling npm package await-to-js Then I looked at the source code It's not difficult. I wrote a corresponding js, And used in the last iteration of the current company's project , Let's drag it down to today to share

Why do you need to do await Error handling of

When the project is complex enough Usually a async There are many... In the method await If await If you don't catch the error, it will lead to the whole async The interruption of a function , This leads to page data errors , The display in front of users is the white screen

  1. Take up a Page component initialization ( such as :componentDidMount) When it's time to init A lot of data
  • Get initialization filter Conditions
  • Get a permission status
  • Get the data list
async componentDidMount(){
// If getFilter Something went wrong inside So the whole async It was interrupted
await getFilter()
await getSomeAuth()
await getSomeList()
 Copy code 

General error capture processing

await getFilter()
throw new Error(err)
await getSomeAuth()
throw new Error(err)
await getSomeList()
throw new Error(err)
 Copy code 
  • Write here Maybe a little friend will ask why not use one try,catch The parcel , But with one try,catch We don't know exactly which await Something went wrong

Combined with the current project axios Encapsulation Conduct await Error trapping

  1. axios The secondary packaging position of
  2. util.js Encapsulation
export function to(promise: Promise<unknown>) {
// await Back The interface function we encapsulate is a promise Then it can be called by chaining catch and then
return promise
.then((result) => {
// When executed correctly Returns an array ,err It's empty ,result Is the success return value
return [null, result]
//await When it's wrong Only the corresponding error is returned
.catch((err) => [err])
 Copy code 

3. call

// path alias webpck Do the corresponding configuration in
import {testApi} from '@api'
import { to } from '@util'
async componentDidMount(){
const [err,result] await getFilter()
console.log(`getFilter ${err}`)
const {success, data,msg}=result
// there msg Usually Validation error returned by backend , For details, see axios Encapsulation
// getSomeAuth() and getSomeList() The same can be
 Copy code 


If the content of this article has a certain reference value for your study or work , Remember to praise San Lian Thank you very much. ! If you have any questions, you can leave a message


  1. CSS layout
  2. Application scenario explanation of Vue dynamic component
  3. Redux learning notes 04 -- using multiple reducers to manage data
  4. After three months of typescript writing, what have I learned?
  5. Node family - what is a callback?
  6. React -- a simple implementation of render & create element
  7. JS learning simple usage of jquery
  8. Seamless love
  9. 小白前端入门笔记(12),设置哑链接
  10. Small white front-end entry notes (12), set dumb links
  11. Vue2. X opens composition API and TSX
  12. Interview record and thinking of social recruitment for one and a half years (Alibaba, Tencent, baidu offer)
  13. Flex learning notes
  14. The most essential closure article in the eastern hemisphere
  15. 2021-05-03 hot news
  16. Sword finger offer -- reverse order pair in array (JS Implementation)
  17. Working process of scaffold
  18. Use decorator mode to strengthen your fetch
  19. [JS] scope (Introduction)
  20. Employment information statistics network (interface document)
  21. Analysis of MVC
  22. [middle stage] please stay and join me in the backstage
  23. Understanding front end garbage collection
  24. [continuous update] front end special style implementation
  25. Flutter product analysis and package reduction scheme
  26. XPath positioning
  27. 前端开发css中的flex布局的使用
  28. The use of flex layout in front end development CSS
  29. JQuery核心函数和静态方法
  30. JQuery core functions and static methods
  31. Node family - understanding of blocking and non blocking
  32. 热点微前端Microfrontend的讨论:谷歌AdWords是真实的微前端
  33. Vue source code analysis (2) initproxy initialization proxy
  34. What's TM called react diff
  35. Summary of common front end data structure
  36. Useeffect in hooks
  37. [encapsulation 02 design pattern] Command pattern, share meta pattern, combination pattern, proxy pattern, strategy pattern
  38. Front end notes: virtual Dom and diff of vue2. X
  39. The best code scanning plug-in of flutter
  40. The simplest plug-in for rights management of flutter
  41. 21. Object oriented foundation "problems and solutions of object traversal"
  42. Discussion on hot micro front end: Google AdWords is a real micro front end
  43. Usecallback and usememo for real performance optimization
  44. 【前端圭臬】十一:从规范看 JavaScript 执行上下文(下)
  45. [front end standard] 11: Javascript execution context from the perspective of specification (2)
  46. Hexagonal六角形架构ReactJS的实现方式 - Janos Pasztor
  47. Transaction of spring's reactive / imperative relational database
  48. The implementation of hexagonal hexagonal reactjs Janos pasztor
  49. HTTP状态码:402 Payment Required需要付款 - mozilla
  50. HTTP status code: 402 payment required - Mozilla
  51. Factory mode, constructor mode and prototype mode
  52. Build the scaffold of react project from scratch (Series 1: encapsulating a request method with cache function based on Axios)
  53. Cocos Quick Start Guide
  54. Comparison of three default configurations of webpack5 modes
  55. A case study of the combination of flutter WebView and Vue
  56. CSS: BFC and IFC
  57. A common error report and solution in Vue combat
  58. JS: this point
  59. JS: prototype chain
  60. JavaScript series -- promise, generator, async and await