其他分享
首页 > 其他分享> > 从ngrx store里selector出来的Observable,执行subscribe的单步调试

从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的原创文章,尽在:“汪子熙”:

标签:Observable,ngrx,selector,subscriber,subscribe,operator,js,next,store
来源: https://blog.csdn.net/i042416/article/details/114273863