国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

對(duì)saga學(xué)習(xí)筆記

wizChen / 3545人閱讀

摘要:在調(diào)用函數(shù)時(shí)傳入了的監(jiān)聽入口,一個(gè)函數(shù)將傳入執(zhí)行一次獲得該函數(shù)的迭代器,將和其他參數(shù),,,,傳入并執(zhí)行。調(diào)用傳入的函數(shù),如果執(zhí)行結(jié)果為的話執(zhí)行如果為迭代器的話,執(zhí)行生成一個(gè)子進(jìn)程否則直接調(diào)用將執(zhí)行結(jié)果傳入。

1.生成saga中間件

a.通過sagaMiddlewareFactory工廠函數(shù)生成sagaMiddleware并將之返回
b.在生成中間件時(shí)默認(rèn)情況下,context為{}, channel是由stdChannel函數(shù)生成, sagaMonitor為空
c.生成中間件就是redux的中間件,用戶dispatch時(shí)會(huì)先經(jīng)過中間件,在saga中間件會(huì)先調(diào)用其他中間件(通過next(action)),之后執(zhí)行channel.put(action)來通知信道中處于監(jiān)聽狀態(tài)的effect執(zhí)行。

2.stdChannel生成標(biāo)準(zhǔn)信道

a.此函數(shù)內(nèi)部調(diào)用的是同文件的multicastChannel函數(shù),只是將生成的chan的put方法進(jìn)行了二次封裝。
b.multicastChannel(多播信道)內(nèi)部維護(hù)currentTakers和nextTakers共同指向的一個(gè)任務(wù)隊(duì)列。
    b1.multicastChannel函數(shù)返回一個(gè)對(duì)象,對(duì)象中包含put、take、close三個(gè)用于操作內(nèi)部隊(duì)列的函數(shù)和一個(gè)MULTICAST為true的標(biāo)識(shí)符。
    b2.take函數(shù)用于將callback函數(shù)(任務(wù))放入任務(wù)隊(duì)列中,并給callback函數(shù)函數(shù)綁定[MATCH]屬性(默認(rèn)都是() => ()=> true )和cancel方法(從隊(duì)列中移除該callback函數(shù))
    b3.put函數(shù)將任務(wù)隊(duì)列中(take放入的callback)任務(wù)循環(huán)執(zhí)行,輸入為dispatch的action
    b4.close函數(shù),循環(huán)執(zhí)行,與put類似,只是輸入為 { type: CHANNEL_END_TYPE }

3.sagaMiddleware.run

a.內(nèi)部調(diào)用的boundRunSaga函數(shù),該函數(shù)為生成saga中間件是聲明的,而這個(gè)函數(shù)是將runSaga函數(shù)綁定(context, channel, dispatch, getState, sagaMonitor, options)參數(shù)得。
    a1.在調(diào)用runSaga函數(shù)時(shí)傳入了effects的監(jiān)聽入口,saga(一個(gè)generate函數(shù));將傳入saga執(zhí)行一次獲得該函數(shù)的迭代器iterator,將iterator和其他參數(shù)(channel, getState, sagaMonitor,dispatch,finalizeRunEffect)傳入proc并執(zhí)行proc。
        注意:dispatch是通過wrapSagaDispatch包裹redux的dispatch得到的(給調(diào)用時(shí)傳入的action綁定了SAGA_ACTION變量,值為{ value: true });finalizeRunEffect = v => v
    a2.將runEffect賦值給finalRunEffect函數(shù),調(diào)用newTask創(chuàng)建一個(gè)主任務(wù)(內(nèi)部維護(hù)一個(gè)任務(wù)的queue并有addTask等方法),調(diào)用一次next方法后,將task返回
    a3.next方法為傳入的迭代器的自動(dòng)執(zhí)行函數(shù),根據(jù)傳入?yún)?shù)執(zhí)行不同操作,無參數(shù)直接執(zhí)行iterator的next函數(shù),如返回的done為false,則執(zhí)行digestEffect函數(shù), 如果done為true則調(diào)用mainTask的cont函數(shù)。
    a4.digestEffect將傳入的cb(上面的next)函數(shù)包裝(所有cb函數(shù)都只能實(shí)行一次,再次執(zhí)行時(shí)發(fā)現(xiàn)已經(jīng)執(zhí)行完成則直接返回),調(diào)用finalRunEffect(默認(rèn)為runEffect)函數(shù)。
    a5.runEffect判斷傳入的effect(next中執(zhí)行迭代器后result.value)類型,如果是promise則調(diào)用resolvePromise(effect, currCb);如果為迭代器iterator(說明執(zhí)行的也是個(gè)generator函數(shù))則調(diào)用proc穿件一個(gè)子任務(wù)進(jìn)程,如果為effect(含有[IO]屬性)則根據(jù)effect的type從effectRunnerMap中映射出對(duì)應(yīng)的執(zhí)行函數(shù)并執(zhí)行,執(zhí)行時(shí)把(env, effect.payload, currCb(只執(zhí)行一次的上面的next), executingContext(包含task和digestEffect))傳入。
b.effectRunnerMap:
    b1.select: runSelectEffect, 直接調(diào)用傳入的getState并通過傳入select映射出需要的屬性。
    b2.take: runTakeEffect, 調(diào)用傳入channel的take方法將傳入cb放入channel信道中。
    b3.put: runPutEffect, 封裝一個(gè)根據(jù)是否傳入channel判斷調(diào)用channel.put或redux的dispatch的函數(shù)放入調(diào)度asp()隊(duì)列,并將整個(gè)asp隊(duì)列中任務(wù)全部執(zhí)行。
    b4.call: runCallEffect, 調(diào)用傳入的fn函數(shù),如果fn執(zhí)行結(jié)果為promise的話執(zhí)行resolvePromise;如果為迭代器iterator的話,執(zhí)行proc生成一個(gè)子進(jìn)程;否則直接調(diào)用cb將執(zhí)行結(jié)果傳入。
    
    
    

4.其他:

a.matchers是用來配置之后dispatch的action的。      

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/106165.html

相關(guān)文章

  • Redux 進(jìn)階 - react 全家桶學(xué)習(xí)筆記(二)

    摘要:在函數(shù)式編程中,異步操作修改全局變量等與函數(shù)外部環(huán)境發(fā)生的交互叫做副作用通常認(rèn)為這些操作是邪惡骯臟的,并且也是導(dǎo)致的源頭。 注:這篇是17年1月的文章,搬運(yùn)自本人 blog... https://github.com/BuptStEve/... 零、前言 在上一篇中介紹了 Redux 的各項(xiàng)基礎(chǔ) api。接著一步一步地介紹如何與 React 進(jìn)行結(jié)合,并從引入過程中遇到的各個(gè)痛點(diǎn)引出 ...

    Godtoy 評(píng)論0 收藏0
  • redux-saga框架使用詳解及Demo教程

    摘要:通過創(chuàng)建將所有的異步操作邏輯收集在一個(gè)地方集中處理,可以用來代替中間件。 redux-saga框架使用詳解及Demo教程 前面我們講解過redux框架和dva框架的基本使用,因?yàn)閐va框架中effects模塊設(shè)計(jì)到了redux-saga中的知識(shí)點(diǎn),可能有的同學(xué)們會(huì)用dva框架,但是對(duì)redux-saga又不是很熟悉,今天我們就來簡(jiǎn)單的講解下saga框架的主要API和如何配合redux框...

    Nosee 評(píng)論0 收藏0
  • 精益 React 學(xué)習(xí)指南 (Lean React)- 3.4 掌控 redux 異步

    摘要:舉例來說一個(gè)異步的請(qǐng)求場(chǎng)景,可以如下實(shí)現(xiàn)任何異步的邏輯都可以,如等等也可以使用的和。實(shí)際上在中,一個(gè)就是一個(gè)函數(shù)。 書籍完整目錄 3.4 redux 異步 showImg(https://segmentfault.com/img/bVyou8); 在大多數(shù)的前端業(yè)務(wù)場(chǎng)景中,需要和后端產(chǎn)生異步交互,在本節(jié)中,將詳細(xì)講解 redux 中的異步方案以及一些異步第三方組件,內(nèi)容有: redu...

    JouyPub 評(píng)論0 收藏0
  • 精益 React 學(xué)習(xí)指南 (Lean React)- 3.5 compose redux saga

    摘要:通過可以實(shí)現(xiàn)很多有趣的簡(jiǎn)潔的控制。這里默認(rèn)使用到了的一個(gè)特性,如果某一個(gè)任務(wù)成功了過后,其他任務(wù)都會(huì)被。組合是的內(nèi)關(guān)鍵字,使用的場(chǎng)景是一個(gè)。 書籍完整目錄 3.5 compose redux sages showImg(https://segmentfault.com/img/bVyoVa); 基于 redux-thunk 的實(shí)現(xiàn)特性,可以做到基于 promise 和遞歸的組合編排,而...

    Joyven 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

wizChen

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<