最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

errors

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

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

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

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

?? 用 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() // 打印調(diào)用棧
Errors.New('as').unWrap() // 'as'

最佳實踐

import { AnomalousChain, panicProcessing } from '@memo28/utils'
class A extends AnomalousChain {
  // 定義錯誤處理函數(shù),
  // 當每次執(zhí)行的被 panicProcessing 裝飾器包裝過的函數(shù)都會檢查 是否存在 this.errors 是否為 ErrorsNewResult 類型
  // 如果為 ErrorsNewResult 類型則 調(diào)用 panicProcessing的onError回調(diào) 和 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內(nèi)邏輯,反之
    // 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的詳細內(nèi)容,更多關(guān)于go思想處理js異常的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go?通過?Map/Filter/ForEach?等流式?API?高效處理數(shù)據(jù)的思路詳解

    Go?通過?Map/Filter/ForEach?等流式?API?高效處理數(shù)據(jù)的思路詳解

    Stream?的實現(xiàn)思想就是將數(shù)據(jù)處理流程抽象成了一個數(shù)據(jù)流,每次加工后返回一個新的流供使用。這篇文章主要介紹了Go?通過?Map/Filter/ForEach?等流式?API?高效處理數(shù)據(jù),需要的朋友可以參考下
    2022-01-01
  • go語言區(qū)塊鏈學習調(diào)用智能合約

    go語言區(qū)塊鏈學習調(diào)用智能合約

    這篇文章主要為大家介紹了go語言區(qū)塊鏈學習中如何調(diào)用智能合約的實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-10-10
  • Go中使用加密算法的方法

    Go中使用加密算法的方法

    本文通過實例代碼給大家介紹go中使用加密算法的方法,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-08-08
  • Golang Gin框架中間件的用法詳解

    Golang Gin框架中間件的用法詳解

    中間件是Gin框架中的一個核心概念,它允許開發(fā)者在處理HTTP請求的過程中插入自定義的鉤子函數(shù),從而實現(xiàn)諸如日志記錄、身份驗證、權(quán)限控制等公共邏輯,本文將結(jié)合實際案例,詳細講解Gin框架中間件的用法
    2024-10-10
  • Go基礎(chǔ)語法的使用

    Go基礎(chǔ)語法的使用

    本文主要介紹了Go基礎(chǔ)語法的使用,包括標識符、關(guān)鍵字、行分隔符、var關(guān)鍵字、:=運算符、空格、注釋、package、import、輸入輸出、運算符、條件控制、循環(huán)等,感興趣的可以了解一下
    2023-11-11
  • 破解IDEA(Goland)注冊碼設置 license server一直有效不過期的過程詳解

    破解IDEA(Goland)注冊碼設置 license server一直有效不過期的過程詳解

    這篇文章主要介紹了破解IDEA(Goland)注冊碼設置 license server一直有效不過期,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • go 壓縮解壓zip文件源碼示例

    go 壓縮解壓zip文件源碼示例

    這篇文章主要為大家介紹了go壓縮及解壓zip文件的源碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • golang 兩個go程輪流打印一個切片的實現(xiàn)

    golang 兩個go程輪流打印一個切片的實現(xiàn)

    這篇文章主要介紹了golang 兩個go程輪流打印一個切片的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • Go設計模式之原型模式講解和代碼示例

    Go設計模式之原型模式講解和代碼示例

    原型是一種創(chuàng)建型設計模式,使你能夠復制對象,甚至是復雜對象,而又無需使代碼依賴它們所屬的類,本文將通過代碼示例示例給大家講解一下Go 原型模式,感興趣的小伙伴可以參考閱讀
    2023-07-07
  • Golang中使用Date進行日期格式化(沿用Java風格)

    Golang中使用Date進行日期格式化(沿用Java風格)

    這篇文章主要介紹了Golang中使用Date進行日期格式化,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04

最新評論

宜良县| 潼关县| 葵青区| 潍坊市| 无极县| 西林县| 华阴市| 阿尔山市| 巴彦县| 房产| 交城县| 清水河县| 岑巩县| 城市| 连城县| 泸水县| 阿拉尔市| 依兰县| 皮山县| 尉犁县| 剑川县| 中山市| 石狮市| 滦平县| 双桥区| 罗山县| 综艺| 衡南县| 盘山县| 绥德县| 长乐市| 宣武区| 临颍县| 都匀市| 安多县| 双牌县| 且末县| 翼城县| 泗阳县| 虎林市| 新野县|