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