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

詳解JavaScript中的before-after-hook鉤子函數(shù)

 更新時間:2022年12月15日 13:55:51   作者:nd  
最近看別人的代碼,接觸到一個插件,before-after-hook,百度搜一圈也沒有看到什么地方有教程,本文就來簡單介紹一下這個插件的使用方法,需要的可以參考一下

before-after-hook

最近看別人的代碼,接觸到一個插件,before-after-hook,百度搜一圈也沒有看到什么地方有教程,看這個字面意思是一個hook,和axios里面的攔截器,vue-router里面的導(dǎo)航守衛(wèi)類似。插件名字暫且叫它“前后鉤子”吧,本文簡單介紹這個插件的使用方法。

1.單獨的鉤子

先看一個簡單的例子,代碼如下:

  import Hook from 'before-after-hook'
  const hook = new Hook.Singular()

  function getData(options) {
    const result = hook(fetchData, options)
  }
  //設(shè)置鉤子
  hook.before(beforHook)
  hook.error(errorHook)
  hook.after(afterHook)
  getData({id: 123})

  function fetchData(options) {
    console.log('fetchData', options)
    return options
  }

  function handleData(res) {
  }
  function handleGetError(e) {
  }
  function beforHook(e) {
    console.log('beforHook', e)
  }
  function errorHook(e) {
    console.log('errorHook', e)
  }
  function afterHook(e) {
    console.log('afterHook', e)
  }

輸出結(jié)果如下圖1:

從結(jié)果可以看出,在執(zhí)行fetchData方法的時候,先去執(zhí)行beforeHook,執(zhí)行完fetchData語句的時候,又執(zhí)行了afterHook。如果在執(zhí)行fetchData的時候拋出一個錯誤,會觸發(fā)errorHook,只需在上面的fetchData方法中拋出一個錯誤,代碼如下:

    console.log('getData', options)
    throw new Error('error')
    return options
  }

執(zhí)行結(jié)果如下圖2:

從執(zhí)行結(jié)果上可以看到當(dāng)fetchData方法報錯的時候會觸發(fā)errorHook。

before-after-hook簡單用法就是先用鉤子鉤住一個方法,然后再設(shè)置這個鉤子的處理函數(shù):beforeHook,errorHook,afterHook,對應(yīng)的在這個方法調(diào)用之前,調(diào)用出錯,調(diào)用之后觸發(fā)相應(yīng)的鉤子函數(shù)。

2.Hook collection

Hook.Colleciton和Hook.Singuar本質(zhì)上沒有什么不同,Hook.Collection創(chuàng)建的鉤子來處理一些有相同的名稱的鉤子。對于這兩種鉤子,他們的執(zhí)行順序如下:

  • beforeHook
  • fecchFromDatabase
  • afterHook
  • handleData

來看下面的代碼

  import Hook from 'before-after-hook'
  const hookCollection = new Hook.Collection()

  function getData(options) {
    try {
      hookCollection('get', fetchData, options)
      handleData(options)
    } catch (e) {
      handleGetError(e)
    }
  }
  hookCollection.before('get', beforHook)
  hookCollection.error('get', errorHook)
  hookCollection.after('get', afterHook)
  getData({id: 123})


  function fetchData(options) {
    console.log('getData', options)
    return options
  }
  function beforHook(e) {
    console.log('beforHook', e)
  }
  function errorHook(e) {
    console.log('errorHook', e)
  }
  function afterHook(e) {
    console.log('afterHook', e)
  }

  function handleData(data) {
    console.log('handleData', data)
  }

  function handleGetError(e) {
    console.log('handleGetError', e)
  }

輸出結(jié)果如下圖3:

beforeHook可以在將請求參數(shù)傳遞給fetchDatabase的時候修改傳入的參數(shù)。

在beforeHook和fetchFromDatabase的時候如果有錯誤,觸發(fā)errorHook。

如果再afterHook里出現(xiàn)錯誤,會調(diào)用handleGetError,而不是afterHook,handleData。

注意他們的名字必須一致,不然會執(zhí)行不到。

到此這篇關(guān)于詳解JavaScript中的before-after-hook鉤子函數(shù)的文章就介紹到這了,更多相關(guān)JavaScript before-after-hook鉤子函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

都兰县| 射洪县| 武乡县| 白玉县| 松溪县| 温宿县| 景东| 偏关县| 自治县| 凤翔县| 湘乡市| 阿瓦提县| 康定县| 临汾市| 阳高县| 阳东县| 名山县| 大余县| 彭泽县| 黄冈市| 永修县| 上饶县| 奇台县| 左云县| 彩票| 汝城县| 若尔盖县| 昌宁县| 石河子市| 博湖县| 蒙山县| 博罗县| 红桥区| 犍为县| 凤台县| 通辽市| 甘泉县| 东阿县| 淮北市| 嵊泗县| 牙克石市|