<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          不知道前端代碼哪里報(bào)錯(cuò)了?我有七種方式去監(jiān)控它!

          共 1695字,需瀏覽 4分鐘

           ·

          2024-11-29 22:20

          前言

          大家好,我是林三心,用最通俗易懂的話講最難的知識(shí)點(diǎn)是我的座右銘,基礎(chǔ)是進(jìn)階的前提是我的初心~

          我之前寫了一個(gè)前端監(jiān)控的庫(kù) sunshine-track,很多人都來問我說,錯(cuò)誤監(jiān)控 這個(gè)環(huán)節(jié)的思路是什么,要怎么在前端項(xiàng)目中做錯(cuò)誤監(jiān)控?

          鏈接:https://github.com/sanxin-lin/sunshine-track

          錯(cuò)誤類型

          我們先來說說前端中的錯(cuò)誤類型有哪一些

          常見錯(cuò)誤類型

          1、SyntaxError

          SyntaxError 是解析時(shí)發(fā)生語(yǔ)法錯(cuò)誤,這個(gè)錯(cuò)誤是捕獲不到的,因?yàn)樗前l(fā)生在構(gòu)建階段,而不是運(yùn)行階段

          2、TypeError

          TypeError 指的是:值不是所期待的類型

          3、ReferenceError

          ReferenceError 指的是:引用未聲明的變量

          4、RangeError

          RangeError 指的是:當(dāng)一個(gè)值不在其所允許的范圍或者集合中,通常會(huì)在無(wú)限遞歸時(shí)報(bào)錯(cuò)

          網(wǎng)絡(luò)錯(cuò)誤

          1、ResourceError

          ResourceError 指的是:資源加載錯(cuò)誤

          2、請(qǐng)求錯(cuò)誤

          錯(cuò)誤監(jiān)聽

          接下來講一下我們應(yīng)該如何監(jiān)聽這些錯(cuò)誤

          try...catch

          try...catch 是捕獲錯(cuò)誤的重要方式,但是它只能捕獲運(yùn)行報(bào)錯(cuò)、同步報(bào)錯(cuò),捕獲不了 編譯報(bào)錯(cuò)、異步報(bào)錯(cuò)

          window.onerror

          代碼報(bào)錯(cuò)時(shí),會(huì)觸發(fā) window.onerror 回調(diào)函數(shù),這個(gè)回調(diào)函數(shù)接受了以下幾個(gè)參數(shù)

          但是 window.onerror 也是有缺點(diǎn)的,捕獲不了 編譯報(bào)錯(cuò)、資源報(bào)錯(cuò)

          window.addEventListener('error')

          由于 冒泡機(jī)制 ,當(dāng)資源報(bào)錯(cuò) 時(shí)觸發(fā) error,會(huì)冒泡到 window 上,所以 window.addEventListener('error') 可以捕獲到 資源報(bào)錯(cuò),但是它也只能捕獲 script、css、img 這些標(biāo)簽加載資源的報(bào)錯(cuò),而捕獲不了 new Image 這種資源加載報(bào)錯(cuò),且捕獲不了 網(wǎng)絡(luò)錯(cuò)誤

          Promise catch

          當(dāng) Promise 狀態(tài)變成 rejected 時(shí),可以使用 catch 方法去捕獲

          async/await

          try...catch 雖然捕獲不了異步錯(cuò)誤,但是我們知道 async/await 是用同步的方式去執(zhí)行異步

          window.addEventListener('unhandledrejection')

          無(wú)論是 Promise、async/await 歸根結(jié)底都是 Promise異步報(bào)錯(cuò),都可以使用 window.addEventListener('unhandledrejection') 來捕獲錯(cuò)誤

          Vue & React

          Vue 提供了 Vue.config.errorHandler 這個(gè)屬性,可傳入錯(cuò)誤回調(diào),只要是組件里報(bào)錯(cuò)了,都會(huì)被這個(gè)回調(diào)函數(shù)捕獲

          React 需要寫一個(gè)錯(cuò)誤邊界接收組件 ErrorBoundary

          結(jié)語(yǔ)

          我是林三心,一個(gè)待過小型toG型外包公司、大型外包公司、小公司、潛力型創(chuàng)業(yè)公司、大公司的作死型前端選手

          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  播放日本A片 | 北条麻妃九九九视频 | 在线免费观看黄色视频 | 中国一区二区精品 | 色综合色88 |