从ngrx store里selector出来的Observable,执行subscribe的单步调试
源代碼:
getNextPageContext(): Observable<PageContext> {const a = this.store.pipe(select(RoutingSelector.getNextPageContext));console.log('Jerry next page context: ' + a);a.subscribe((b) =>{console.log(b);});return a;}單步調(diào)試:
a是調(diào)用類似ABAP open SQL從ngrx store里select出來(lái)的一個(gè)store 引用:
把store對(duì)象的operator字段取出來(lái),存放到變量operator里。
等價(jià)于:const operator = this.operator;
上圖第21行的變量ObserverOrNext, 即我們指定到subscribe調(diào)用里的回調(diào)函數(shù)。
在toSubscriber.js文件里,把我們傳入到subscribe里的回調(diào)函數(shù),封裝成一個(gè)Subscriber實(shí)例。
Subscriber的destination字段,存儲(chǔ)的是SafeSubscriber實(shí)例,指向我們指定的回調(diào)函數(shù)。
_next存放的就是回調(diào)函數(shù):
operator:
this和this.source的類型都是Store.
下面這行代碼相當(dāng)于告訴this.store, 讓其通知subscriber了:
DistinctUntilChangedSubscriber這個(gè)subscriber,就是普通的subscriber基礎(chǔ)上,包裹一層DistinctUntilChanged:
現(xiàn)在又要為DistinctUntilChangedSubscriber創(chuàng)建一個(gè)subscriber了:
這里終于調(diào)用store的_subscribe方法了:
在ReplaySubject.js里,手動(dòng)調(diào)用subscriber的next方法:
而next的輸入?yún)?shù),這個(gè)_events數(shù)組里有全局的action數(shù)據(jù):
@ngrx/store/update-reducers里能看到所有的features:
這里能看出,輸入是上面介紹的一大串復(fù)雜的state和action結(jié)構(gòu),輸出就是homepage和content page的Pagecontext了。
而上圖29行的this.project, 應(yīng)該是我們應(yīng)用程序傳入的一個(gè)函數(shù)。
864行,一會(huì)再設(shè)置斷點(diǎn):
執(zhí)行到53行時(shí),再切換到ngrx-store.js里,設(shè)置斷點(diǎn):
注意斷點(diǎn)的位置需設(shè)置準(zhǔn)確:
沒(méi)有成功,再試試map.js的第29行:
cmsRequired
這里是RouterState的初始狀態(tài):
page.effect.ts:
更多Jerry的原創(chuàng)文章,盡在:“汪子熙”:
總結(jié)
以上是生活随笔為你收集整理的从ngrx store里selector出来的Observable,执行subscribe的单步调试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 万花筒
- 下一篇: SAP Spartacus的版本机制