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

JS中間件設(shè)計(jì)模式的深入探討與實(shí)例分析

 更新時(shí)間:2020年04月11日 13:56:16   作者:qdmoment  
這篇文章主要介紹了JS中間件設(shè)計(jì)模式,結(jié)合實(shí)例形式分析了JS中間件設(shè)計(jì)模式功能、原理、應(yīng)用場(chǎng)景及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

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

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

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

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)

運(yùn)行結(jié)果:這里類(lèi)似與洋蔥圈模型,但是是先從里向外,再由外向里

執(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

接下來(lái)對(duì)上面的實(shí)例進(jìn)行簡(jiǎn)化:

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)

這時(shí)的中間件只是一層處理邏輯,沒(méi)有傳遞初始處理邏輯,所以中間件是單一的,運(yùn)行結(jié)果:

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

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

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

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

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

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

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論

武胜县| 布拖县| 疏勒县| 海丰县| 石家庄市| 莱芜市| 淮南市| 肇源县| 顺义区| 银川市| 永川市| 嘉义市| 黄浦区| 长沙县| 乌苏市| 光山县| 班玛县| 长垣县| 遂宁市| 屏东县| 汾西县| 三穗县| 中西区| 鲜城| 辉南县| 平南县| 兴海县| 西宁市| 乌审旗| 苏尼特左旗| 阿勒泰市| 平陆县| 鄂伦春自治旗| 永靖县| 教育| 湾仔区| 黑水县| 秦安县| 溧水县| 伽师县| 巴马|