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

JS中間件設計模式的深入探討與實例分析

 更新時間:2020年04月11日 13:56:16   作者:qdmoment  
這篇文章主要介紹了JS中間件設計模式,結合實例形式分析了JS中間件設計模式功能、原理、應用場景及相關操作注意事項,需要的朋友可以參考下

本文實例講述了JS中間件設計模式。分享給大家供大家參考,具體如下:

中間件作為一些輔助處理功能,應用非常廣泛,例如express中間件,redux中間件,koa中間件,那么中間件的設計模式到底是怎樣的呢。結合中間件的使用實例探討和總結一下中間件的設計思想和一般實現(xiàn)模式。

仿照redux中間件實現(xiàn)模式,看如下一個例子:

function fn2(next){
  console.log('執(zhí)行2,返回改造的next之前')
  return action => {
    console.log('執(zhí)行2')
    next(action)
  }
}
function fn3(next){
  console.log('執(zhí)行3,返回改造的next之前')
  return action => {
    console.log('執(zhí)行3')
    next(action)
  }
}
function fn1(next){
  console.log('執(zhí)行1,返回改造的next之前')
  return action => {
    console.log('執(zhí)行1')
    getData().then( data => {
      next(action)
    })
  }
  
}
 
function getData(){
  return new Promise(resolve => {
    setTimeout( () => {
      resolve(true)
    },3000)
  })
}
const next = (action) => {
  console.log('action',action)
}
// compose([fn1,fn2,fn3])(next)
const mm = [fn1,fn2,fn3].reduce(function(a,b,currentIndex,arr){
  console.log("a",a)
  console.log("b",b)
  return function(...args){
    console.log('args',[...args][0].toString())
    return a(b(...args))
  }
})(next)(1)

運行結果:這里類似與洋蔥圈模型,但是是先從里向外,再由外向里

執(zhí)行3,返回改造的next之前
args action => {
        console.log('執(zhí)行3')
        next(action)
    }
執(zhí)行2,返回改造的next之前
執(zhí)行1,返回改造的next之前
執(zhí)行1
執(zhí)行2
執(zhí)行3
action 1

接下來對上面的實例進行簡化:

function fn2(action){
  console.log('執(zhí)行2,返回改造的next之前')
  action+2
}
function fn3(action){
  console.log('執(zhí)行3,返回改造的next之前')
  action+1
}
function fn1(action){
  console.log('執(zhí)行1,返回改造的next之前')
  return action+1
  
}
 
function getData(){
  return new Promise(resolve => {
    setTimeout( () => {
      resolve(true)
    },3000)
  })
}
const next = (action) => {
  console.log('action',action)
}
// compose([fn1,fn2,fn3])(next)
const mm = [fn1,fn2,fn3].reduce(function(a,b,currentIndex,arr){
  console.log("a",a)
  console.log("b",b)
  return function(...args){
    console.log('args',[...args])
    return a(b(...args))
  }
})(1)

這時的中間件只是一層處理邏輯,沒有傳遞初始處理邏輯,所以中間件是單一的,運行結果:

args [ 1 ]
執(zhí)行3,返回改造的next之前
args [ undefined ]
執(zhí)行2,返回改造的next之前
執(zhí)行1,返回改造的next之前

抽離通用邏輯,深入到本質(zhì),中間件是對最初處理邏輯函數(shù)進行改造,如果沒有,只執(zhí)行自身的邏輯。

1,上面比較單一的就是只有自身邏輯的中間件

2,具有初始處理邏輯函數(shù)next的中間件,需要接受next,返回一個新的next'

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯誤與調(diào)試技巧總結》、《JavaScript數(shù)據(jù)結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數(shù)學運算用法總結

希望本文所述對大家JavaScript程序設計有所幫助。

相關文章

最新評論

吴江市| 梅河口市| 南充市| 黄骅市| 望江县| 牡丹江市| 开平市| 永州市| 龙州县| 慈利县| 恩施市| 牡丹江市| 东海县| 东乡族自治县| 昭通市| 嘉善县| 宁晋县| 福贡县| 修水县| 宁武县| 息烽县| 五常市| 奉节县| 鄂尔多斯市| 东平县| 姚安县| 沈丘县| 甘泉县| 体育| 上思县| 长白| 宁国市| 叶城县| 乌兰察布市| 汉寿县| 贡嘎县| 景东| 武安市| 兰溪市| 正安县| 武定县|