如何以go思想去处理js异常抛弃trycatch

前端开发   发布日期:2023年08月14日   浏览次数:582

本篇内容主要讲解“如何以go思想去处理js异常抛弃trycatch”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何以go思想去处理js异常抛弃trycatch”吧!

错误处理的方式

通常情况下 错误处理的方式无非不过两种

  • 泛处理

  • 精处理

其实都很好理解

  1. // 伪代码
  2. try {
  3. const file = await readFile('../file')
  4. const content = filterContent(file)
  5. } catch (e) {
  6. alert('xxxx',e.msg)
  7. }

泛处理指的是对所有可能的错误都使用相同的处理方式,比如在代码中使用相同统一的错误提示信息

这种方式适用于一些简单的,不太可能发生的错误,不如文件不存在,网络连接超时等。

对于更加复杂的错误,应该使用精处理,即根据具体情况对不同类型的错误进行特定的处理

  1. const [readErr,readFile] = await readFile('../file')
  2. if (readErr) {
  3. // 处理读取错误
  4. return
  5. }
  6. const [filterErr,filterContent] = filterContent(readFile)
  7. if (filterErr) {
  8. // 处理过滤错误
  9. return
  10. }

精处理可以让我们把控计划的每一步,问题也很显然暴露了出来,过于麻烦

在实际开发当中,我们需要根据实际情况选择适当的方式进行错误处理。

由于本人是精处理分子,基于此开发了一个

  1. js
版本的
  1. errors

如何定义一个错误

  1. import { Errors } from '@memo28/utils'
  2. Errors.News('err')

如何给一个错误分类

  1. import { Errors } from '@memo28/utils'
  2. Errors.News('err', { classify: 1 })

如何判断两个错误是相同类型

  1. import { Errors } from '@memo28/utils'
  2. Errors.As(Errors.News('err', { classify: 1 }),
  3. Errors.News('err2', { classify: 1 })) // true
  4. Errors.As(Errors.News('err', { classify: 1 }),
  5. Errors.News('err2', { classify: 2 })) // false

一个错误包含了哪些信息?

  1. Errors.New('as').info() // { msg: 'as' , classify: undefined }
  2. Errors.New('as').trace() // 打印调用栈
  3. Errors.New('as').unWrap() // 'as'

最佳实践

  1. import { AnomalousChain, panicProcessing } from '@memo28/utils'
  2. class A extends AnomalousChain {
  3. // 定义错误处理函数,
  4. // 当每次执行的被 panicProcessing 装饰器包装过的函数都会检查 是否存在 this.errors 是否为 ErrorsNewResult 类型
  5. // 如果为 ErrorsNewResult 类型则 调用 panicProcessing的onError回调 和 skip函数
  6. skip(errors: ErrorsNewResult | null): this {
  7. console.log(errors?.info().msg)
  8. return this
  9. }
  10. @panicProcessing()
  11. addOne(): this {
  12. console.log('run one')
  13. super.setErrors(Errors.New('run one errors'))
  14. return this
  15. }
  16. @panicProcessing({
  17. // 在 skip 前执行
  18. onError(error) {
  19. console.log(error.unWrap())
  20. },
  21. // onRecover 从错误中恢复, 当返回的是true时 继续执行addTwo内逻辑,反之
  22. // onRecover(erros) {
  23. // return true
  24. // },
  25. })
  26. addTwo(): this {
  27. console.log('run two')
  28. return this
  29. }
  30. }
  31. new A().addOne().addTwo()
  32. // output
  33. run one
  34. run one errors // in onError
  35. run one errors // in skip fn

以上就是如何以go思想去处理js异常抛弃trycatch的详细内容,更多关于如何以go思想去处理js异常抛弃trycatch的资料请关注九品源码其它相关文章!