五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

KOA、Redux、中間件,Promise,next等等

2023-05-10 22:28 作者:小老虎Tigger  | 我要投稿

簡單看一下koa和redux中中間件的實(shí)現(xiàn)

KOA

我們先來看一下koa中間件的用法,copy一個(gè)官網(wǎng)的例子

打印結(jié)果

koa的中間件,其實(shí)主要是koa-compose實(shí)現(xiàn)的,use方法是將函數(shù)推入隊(duì)列當(dāng)中,listen函數(shù)中會(huì)調(diào)用compose返回一個(gè)函數(shù),在每次請(qǐng)求時(shí),會(huì)去調(diào)用這個(gè)函數(shù)。我們主要看一下compose函數(shù)的實(shí)現(xiàn)

compose函數(shù)接收的是middleware的隊(duì)列,就是前面使用use將所有middleware推入的隊(duì)列。返回的也是一個(gè)函數(shù),在每次處理請(qǐng)求時(shí),其實(shí)執(zhí)行的是返回的函數(shù)。我們將返回的函數(shù)簡單處理一下。

這個(gè)函數(shù)結(jié)果context、next兩個(gè)參數(shù),返回了dispatch(0)的執(zhí)行結(jié)果,dispatch函數(shù)接收一個(gè)index參數(shù),通過index獲取到當(dāng)前執(zhí)行的中間件fn,然后執(zhí)行fn(context, dispatch.bind(null, i + 1))。

從dipatch(0)開始執(zhí)行,其實(shí)就是將中間件通過dispatch函數(shù)去執(zhí)行,控制入棧時(shí)機(jī)。

如果我們修改一下代碼,將第一個(gè)函數(shù)去掉async,那么打印的順序也會(huì)發(fā)生變化

而本質(zhì)其實(shí)是這么執(zhí)行的?

而 fn2又相當(dāng)于

相當(dāng)于將console.log(4)放到了微任務(wù)隊(duì)列,會(huì)在當(dāng)前所有同步代碼執(zhí)行完成后,再去執(zhí)行。

Redux

redux中間件是在 dispatch action 的時(shí)候和 action 到達(dá) reducer 之間調(diào)用的。我們也簡單copy一段官網(wǎng)的例子

applyMiddleware返回了一個(gè)函數(shù)

這塊的compose也比較巧妙,而且傳入中間件時(shí)使用多層函數(shù),使用時(shí)通過多次調(diào)用最終將store、next傳入,形成閉包,也很巧妙。

但是相比koa,store、next作為中間件的參數(shù)可能更容易理解。

KOA、Redux、中間件,Promise,next等等的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
云南省| 图们市| 南和县| 田东县| 淄博市| 宜章县| 富顺县| 泸定县| 大竹县| 从江县| 河源市| 东方市| 永州市| 滨州市| 淮阳县| 禹州市| 化州市| 旬阳县| 白玉县| 三门峡市| 郓城县| 台州市| 葫芦岛市| 丰宁| 交口县| 隆德县| 丹凤县| 高要市| 刚察县| 资兴市| 尖扎县| 通城县| 石楼县| 涡阳县| 精河县| 东平县| 石柱| 云南省| 施秉县| 平利县| 敦煌市|