前端練習32 中介軟體模式

2021-09-05 10:02:30 字數 2865 閱讀 9809

中介軟體的實現

reduce用於函式

中介軟體模式(middleware)是一種很常見、也很強大的模式,被廣泛應用在 express、koa、redux 等類庫和框架當中。

簡單來說,中介軟體就是在呼叫目標函式之前,你可以隨意插入其他函式預先對資料進行處理、過濾,在這個過程裡面你可以列印資料、或者停止往下執行中介軟體等。資料就像水流一樣經過中介軟體的層層的處理、過濾,最終到達目標函式。請你模擬乙個中介軟體模式,可以達到以下效果:

callback (ctx) ,

use (fn) ,

go (ctx)

} ctx.name = 'lucy'

next()

}) ctx.age = 12

next()

}) console.log(`$ is $ years old.`) // => lucy is 12 years old.

next()

})// ... 任意呼叫 use 插入中介軟體

next方法是乙個遞迴呼叫的函式,需要作為引數傳遞給中介軟體的第二個引數

所以實現如下:

target: null,

middlewares: ,

index: -1,

callback(ctx) ,

use(fn) ,

go(ctx) else

};execute()

}};本來想用generator實現,結果搗鼓了半天沒成功o(╯□╰)o

後來翻了翻討論區,大神真的厲害,用reduceright一行**實現了我上面go裡面的一坨東西

reduce確實很強大,以前用它來處理物件、字串、數值、陣列,這次要用它處理函式。

假設有這樣四個函式組成的陣列,想讓他們按照14的順序執行,用reduceright實現,如何實現呢

const fn1 = () => ;

const fn2 = () => ;

const fn3 = () => ;

const fn4 = () => ;

實際上我們利用了reduce來當做乙個工具,不斷返回乙個新的函式,在返回新的函式時將當前遍歷的函式壓入到了新的函式中

[fn1, fn2, fn3, fn4].reduceright((total, current) => () => )()
實際上reduceright返回的陣列是這樣乙個過程

最後執行的是x1,所以能夠按照1到4的順序執行函式

那現在假設有乙個callback陣列,我們不想把它加入到函式組成的陣列中,想最後執行它,該怎麼辦呢?

通過上面的例項我們已經知道,reduce構建函式的過程與最後執行的熟悉是相反的,想最後執行callback,就應該將它最先用reduce處理

所以我們可以將這個callback放到reduce的第二個引數,作為初始值傳給total

[fn1, fn2, fn3, fn4].reduceright((total, current) => () => , () => callback())()
這時流程圖變成了:

在回到我們上面的題目來,題目與例子區別就在於,當current對應的函式執行完,total的函式是否執行是由next函式在外部控制的,而next函式是fn函式的引數,所以將total作為引數傳給current

const fn1 = (next) => ;

const fn2 = (next) => ;

const fn3 = (next) => ;

const fn4 = (next) => ;

const callback = () => ;

[fn1, fn2, fn3, fn4].reduceright((total, current) => () => , () => callback())()

流程圖如下:

現在基本上與題目的實現差不多了

middlewares: ,

callback(ctx) ,

use(fn) ,

go(ctx)

}reducereduceright真的是乙個非常強大的工具,很多需要遞迴的地方都可以用這個方法搞定

reduce處理函式相當於不斷生成一層套一層的類似於站堆疊結構的函式,構建的順序是從內向外的,而執行的時候是從外向內的,與reduce的執行順序相反

程式設計師的10x法則果然很準,乙個10x程式設計師用一行**就能實現我這樣的一般程式設計師需要10行**才能實現的功能,路漫漫其修遠,努力吧。

13 2 7 中介軟體

中介軟體顧名思義,是介於request與response處理之間的一道處理過程,相對比較輕量級,並且在全域性上改變django的輸入與輸出。因為改變的是全域性,所以需要謹慎實用,用不好會影響到效能。如果你想修改請求,例如被傳送到view中的httprequest物件。或者你想修改view返回的htt...

21 中介軟體

一 中介軟體的定義 1.中介軟體是django請求 響應處理的鉤子框架,它是乙個輕量級的 低階的 外掛程式 系統,用於全域性改變django的輸入或輸出 2.中介軟體以類的形式體現 3.每個中介軟體元件負責做一些特定的功能,例如django包含乙個中介軟體元件 authenticationmiddl...

07 中介軟體

5 獲取的資料會交給最後乙個中介軟體的process response方法處理,然後依次向前面的中介軟體process response 6 在任一中介軟體的process request和process view方法中有返回值就會直接返回給process response 3 檢視函式 4 中介軟...