欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解以go思想去處理js異常拋棄trycatch

 更新時間:2023年03月08日 11:14:55   作者:我開心比苦惱多  
這篇文章主要為大家介紹了詳解以go思想去處理js異常拋棄trycatch,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

errors

錯誤處理在編程中是不可避免的一部分,在程序開發(fā)過程中,不可必要的會出現(xiàn)各種的錯誤,是人為也可能是失誤,任何不可預料的可能都會發(fā)生

為了更好的保證程序的健壯性和穩(wěn)定性

我們必須要對錯誤處理有更好的認識

最近迷上了golang的錯誤處理哲學,希望由淺入深的總結一下自己的思考和看得見的思考

?? 用 error 表示可能出現(xiàn)的錯誤,用throw強制拋出錯誤

錯誤處理的方式

通常情況下 錯誤處理的方式無非不過兩種

  • 泛處理
  • 精處理

其實都很好理解

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

泛處理指的是對所有可能的錯誤都使用相同的處理方式,比如在代碼中使用相同統(tǒng)一的錯誤提示信息

這種方式適用于一些簡單的,不太可能發(fā)生的錯誤,不如文件不存在,網(wǎng)絡連接超時等。

對于更加復雜的錯誤,應該使用精處理,即根據(jù)具體情況對不同類型的錯誤進行特定的處理

const [readErr,readFile] = await readFile('../file')
if (readErr) {
    // 處理讀取錯誤
    return 
}
const [filterErr,filterContent] =  filterContent(readFile)
if (filterErr) {
    // 處理過濾錯誤
    return
}

精處理可以讓我們把控計劃的每一步,問題也很顯然暴露了出來,過于麻煩

在實際開發(fā)當中,我們需要根據(jù)實際情況選擇適當?shù)姆绞竭M行錯誤處理。

由于本人是精處理分子,基于此開發(fā)了一個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 {
  // 定義錯誤處理函數(shù),
  // 當每次執(zhí)行的被 panicProcessing 裝飾器包裝過的函數(shù)都會檢查 是否存在 this.errors 是否為 ErrorsNewResult 類型
  // 如果為 ErrorsNewResult 類型則 調用 panicProcessing的onError回調 和 skip函數(shù)
  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 前執(zhí)行
    onError(error) {
      console.log(error.unWrap())
    },
    // onRecover 從錯誤中恢復, 當返回的是true時 繼續(xù)執(zhí)行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異常的資料請關注腳本之家其它相關文章!

相關文章

  • Go項目編寫Makefile規(guī)則文件概述

    Go項目編寫Makefile規(guī)則文件概述

    這篇文章主要為大家介紹了Go項目編寫Makefile文件規(guī)則概述,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • Go基礎系列:Go切片(分片)slice詳解

    Go基礎系列:Go切片(分片)slice詳解

    這篇文章主要介紹了Go語言中的切片(分片)slice詳細說明?,需要的朋友可以參考下
    2022-04-04
  • Go 1.21新增的slices包中切片函數(shù)用法詳解

    Go 1.21新增的slices包中切片函數(shù)用法詳解

    Go 1.21新增的 slices 包提供了很多和切片相關的函數(shù),可以用于任何類型的切片,本文通過代碼示例為大家介紹了部分切片函數(shù)的具體用法,感興趣的小伙伴可以了解一下
    2023-08-08
  • Go語言無緩沖的通道的使用

    Go語言無緩沖的通道的使用

    Go語言中無緩沖的通道是指在接收前沒有能力保存任何值的通道,本文主要介紹了Go語言無緩沖的通道的使用,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • 一文詳解Go語言單元測試的原理與使用

    一文詳解Go語言單元測試的原理與使用

    Go語言中自帶有一個輕量級的測試框架testing和自帶的go?test命令來實現(xiàn)單元測試和性能測試。本文將通過示例詳細聊聊Go語言單元測試的原理與使用,需要的可以參考一下
    2022-09-09
  • 最新評論