中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何以go思想去處理js異常拋棄trycatch

發布時間:2023-03-09 14:10:32 來源:億速云 閱讀:101 作者:iii 欄目:開發技術

本篇內容主要講解“如何以go思想去處理js異常拋棄trycatch”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何以go思想去處理js異常拋棄trycatch”吧!

錯誤處理的方式

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

  • 泛處理

  • 精處理

其實都很好理解

// 偽代碼
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”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安化县| 望城县| 新安县| 法库县| 武胜县| 仁怀市| 乐山市| 兖州市| 玉山县| 双桥区| 英山县| 抚远县| 巴中市| 萝北县| 灌阳县| 定州市| 梁平县| 昌都县| 闻喜县| 项城市| 六枝特区| 永和县| 调兵山市| 老河口市| 渝中区| 乌兰察布市| 资溪县| 思南县| 聂拉木县| 中卫市| 桐梓县| 大埔县| 崇州市| 穆棱市| 乌鲁木齐县| 漠河县| 香格里拉县| 天等县| 临洮县| 沅江市| 延川县|