详解以go思想去处理js异常抛弃trycatch

目录
  • errors
  • 错误处理的方式
  • 如何定义一个错误
    • 最佳实践

errors

错误处理在编程中是不可避免的一部分,在程序开发过程中,不可必要的会出现各种的错误,是人为也可能是失误,任何不可预料的可能都会发生

为了更好的保证程序的健壮性和稳定性

我们必须要对错误处理有更好的认识

最近迷上了golang的错误处理哲学,希望由浅入深的总结一下自己的思考和看得见的思考

error 表示可能出现的错误,用throw强制抛出错误

错误处理的方式

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

  • 泛处理
  • 精处理

其实都很好理解

// 伪代码
try {
const file = await readFile('../file')
const content =  filterContent(file)
} catch (e) {
  alert('xxxx',e.msg)
}

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

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

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

const [readErr,readFile] = await readFile('../file')
if (readErr) {
    // 处理读取错误
    return
}
const [filterErr,filterContent] =  filterContent(readFile)
if (filterErr) {
    // 处理过滤错误
    return
}

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

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

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

如何定义一个错误

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

如何给一个错误分类

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

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

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

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

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

最佳实践

import { AnomalousChain, panicProcessing } from '@memo28/utils'
class A extends AnomalousChain {
  // 定义错误处理函数,
  // 当每次执行的被 panicProcessing 装饰器包装过的函数都会检查 是否存在 this.errors 是否为 ErrorsNewResult 类型
  // 如果为 ErrorsNewResult 类型则 调用 panicProcessing的onError回调 和 skip函数
  skip(errors: ErrorsNewResult | null): this {
    console.log(errors?.info().msg)
    return this
  }
  @panicProcessing()
  addOne(): this {
    console.log('run one')
    super.setErrors(Errors.New('run one errors'))
    return this
  }
  @panicProcessing({
    // 在 skip 前执行
    onError(error) {
      console.log(error.unWrap())
    },
    // onRecover 从错误中恢复, 当返回的是true时 继续执行addTwo内逻辑,反之
    // onRecover(erros) {
    //   return true
    // },
  })
  addTwo(): this {
    console.log('run two')
    return this
  }
}
new A().addOne().addTwo()
// output
run one
run one errors // in onError
run one errors // in skip fn

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

(0)

相关推荐

  • Go语言异常处理案例解析

    异常处理 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常 golang中提供了两种处理异常的方式 一种是程序发生异常时, 将异常信息反馈给使用者 一种是程序发生异常时, 立刻退出终止程序继续运行 打印异常信息 Go语言中提供了两种创建异常信息的方式 方式一: 通过fmt包中的Errorf函数创建错误信息, 然后打印 package main import "fmt" func main() { // 1.创建错误信息 var err error =

  • Django RestFramework 全局异常处理详解

    目录 RESTframework定义的异常 一.定义异常处理类 二.注册DRF框架中默认的错误处理为自己定义的类 总结 REST framework定义的异常 APIException 所有异常的父类 ParseError 解析错误 AuthenticationFailed 认证失败 NotAuthenticated 尚未认证 PermissionDenied 权限决绝 NotFound 未找到 MethodNotAllowed 请求方式不支持 NotAcceptable 要获取的数据格式不支持

  • Go语言异常处理(Panic和recovering)用法详解

    目录 基本语法 Panic Recover 示例一:recover()使用方法 实例二:panic()使用方法 基本语法 异常处理是程序健壮性的关键,往往开发人员的开发经验的多少从异常部分处理上就能得到体现.如何适度的添加异常,往往是整个产品体验成败的关键. Go语言中没有Try Catch Exception机制,但是提供了panic-and-recover机制. Panic 内置函数panic() 类似raise,能够停止正常的流程 当函数内调用panic,正常的流程将被终止,defer函数

  • 小学生也能看懂的Golang异常处理recover panic

    🌌 专注Golang,Python语言,云原生,人工智能领域得博主 💜 过去经历的意义在于引导你,而非定义你, 💜 只要我们足够努力,任何人都有无限潜力 🚀panic 抛出异常函数 🚀recover 捕获异常函数 📣1:在一个主协成内捕获异常 package main import ( "fmt" ) func main(){ defer func(){ err := recover() if err != nil{ fmt.Println("捕获到异常") } }() panic("异常出现") //抛出异常,代表错误代码 } 🚀运行结果 📣2:假设子协成内部错误,看看主协成能不能捕获到 package main import ( "fmt" ) func Calculate(){ panic("异常出现") // 同样代表错误代码 } func main(){ defer func()

  • GO语言中err接口及defer延迟异常处理分析

    目录 err接口 panic函数 defer延迟 defer与匿名函数结合使用 recover防止程序中断 err接口 Go语言引入了一个关于错误处理的标准模式,即error接口,它是Go语言内建的接口类型,该接口的定义如下: type error interface { Error() string } 调用对应接口 err:=errors.New("this is normal err") fmt.Println(err.Error()) err2:=fmt.Errorf(&quo

  • 详解以go思想去处理js异常抛弃trycatch

    目录 errors 错误处理的方式 如何定义一个错误 最佳实践 errors 错误处理在编程中是不可避免的一部分,在程序开发过程中,不可必要的会出现各种的错误,是人为也可能是失误,任何不可预料的可能都会发生 为了更好的保证程序的健壮性和稳定性 我们必须要对错误处理有更好的认识 最近迷上了golang的错误处理哲学,希望由浅入深的总结一下自己的思考和看得见的思考 用 error 表示可能出现的错误,用throw强制抛出错误 错误处理的方式 通常情况下 错误处理的方式无非不过两种 泛处理 精处理 其

  • 详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持

    本文介绍了详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持,分享给大家,具体如下: 一个小遗憾 能来看这篇文章的想必不用我来介绍vue是什么了.先让我们膜拜大神!vue项目的创建者尤大写了个sublime下语法高亮的插件,有人问他how about webstorm support?他是这么回答的.默哀一分钟. 添加高亮和语法支持 这个我是通过插件来实现的.网上目前有两个插件: 插件1:https://github.com/henjue/vue-for-idea 插件2:htt

  • 详解前端任务构建利器Gulp.js使用指南

    概述 在软件开发中,任务运行器的好处是不言而喻的.它们可以帮助自动运行常见的冗长的任务,让你可以专注于更重要的事情中,比如敲出很棒的代码.说的严肃点,自动运行一些比如图片压缩.代码压缩.单元测试以及更多的任务的技能,简直就是节省时间的利器. 对于很多前端开发者而言,时下使用最多的任务管理器就是Grunt了,一个可以让你在Gruntfile.js文件中使用JavaScript定义各种运行任务的工具.基本上,只要你了解JavaScript,创建一个Grunt任务是非常简单直接的事情.丰富的第三方插件

  • 详解关于html,css,js三者的加载顺序问题

    <head lang="en"> <meta charset="utf-8"> <title></title> <link rel="stylesheet" href="css/*.css" rel="external nofollow" > <script src="js/*.js></script> </

  • 详解通过JSON数据使用VUE.JS

    最近接到一个比较简单的项目,不准备使用数据库,打算用JSON数据就可以了.结合当前火热的VUE.JS进行数据渲染. 尽管不打算使用数据库,可是一般的操作增删查改依旧是少不了的.如果使用到数据库的话,不妨做一个API出来,那么网站.APP等都可以依照这个进行操作.在这篇文章里面,我们只是打算简单的引用而已. 下面先来看看我的JSON文件,这里是一个类别文档Category.json: { "msg": "ok", "data":[ { "

  • 详解如何使用nvm管理Node.js多版本

    Node.js版本管理工具.Git地址:https://github.com/nvm-sh/nvm 安装nvm Mac OS: 如果已经安装了node,在安装nvm之前,不需要卸载这个版本的node.这个版本的node后续会成为nvm中的system版本的node. 具体步骤如下: 首先安装C++编译器,使用XCode 的命令行工具,在Terminal中输入: xcode-select --install 然后在Terminal里输入: curl -o- https://raw.githubus

  • 详解帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)

    提示:不要排斥,静下心来,认真读完,你就搞懂了!(可以先看一下最后的总结部分再回过头来完整看完) 1. 前言 作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞懂它们.这里说明一点,__proto__属性的两边是各由两个下划线构成(这里为了方便大家看清,在两下划线之间加入了一个空格:_ _proto_ _),实际上,该属性在ES标准定义中的名字应该

  • 详解如何在vscode里面调试js和node.js的方法步骤

    在开发的过程中,几乎不可能一次性就能写出毫无破绽的程序,断点调试代码是一个普遍的需求. 作为前端开发工程师,以往我们开发的JavaScript程序都运行在浏览器端,利用Chrome提供的开发者工具就可以方便的进行源码断点调试.其步骤有四,详情不表,粗略概括如下: 1.打开Chrome开发者工具: 2.点击进入Sources标签页,在页面的左侧就能看到JS代码的目录: 3.找到需要设置断点的源文件,在需要中断的哪行代码左侧单击鼠标左键,就可以设置断点,如果你的代码是uglify过的,则需导入相应的

  • 详解照片瀑布流效果(js,jquery分别实现与知识点总结)

    看了网上的瀑布流教程,自己跟着写了遍,然后总结了下知识点 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="jquery-1.8.3.min.js"/&g

  • 详解如何较好的使用js

    1 假如浏览器不支持JavaScript怎么办? a.为什么浏览器会不支持?大部分浏览器都有禁用脚本的功能,例如chrome. b.在js被禁用的情况下要保证网页仍能实现它的核心功能(关键的用户需求) 例子:在一个新窗口里打开链接,可以使用BOM的open()方法 function popUp(winURL) { window.open(winURL, "popup", "width=320,height=480"); } 具体的js实现有以下几个方案: 方案一:使

随机推荐