【问题标题】:Why does removing BehaviourSubject cause my service to delay for 3-4 seconds?为什么删除 BehaviourSubject 会导致我的服务延迟 3-4 秒?
【发布时间】:2019-09-20 17:58:20
【问题描述】:

我之前创建了一个BehaviourSubject,在订阅它时我正在拨打服务电话。但是,由于BehaviorSubject 的性质,BehaviouSubject 的初始化是不必要的。因此,在进一步阅读时,我将BehaviourSubjedct 更改为ReplaySubject(1)

现在,在我定义了服务的主要@Injectable 类中,还有另一个独立的服务,一旦我进行了上述更改,它就会被延迟。如何确定问题的原因?

组件.ts

constructor(private _subjectService: SubjectService, private _s1: Service1){
    this._s1.Call1();
    this.testFunction();
}

testFunction(){
this._subjectService.GetData().subscribe(res => {
      if (res !== null) {
         this._s1.Call2();  
     }
   }
}   

主题服务

  // filterSubject = new BehaviorSubject(<KendoRequestVM>{});
  // filterDataSubject = new BehaviorSubject(<KendoRequestVM>{});

   filterSubject = new ReplaySubject<KendoRequestVM>(1);
   filterDataSubject = new ReplaySubject<KendoRequestVM>(1);

在这里,当我使用 BehaviouSubject 而不是 ReplaySubject 时,会调用 Call1()。

【问题讨论】:

    标签: angular asynchronous rxjs observable


    【解决方案1】:

    行为主体总是会立即返回(甚至同步)。重播主题只有在具有值的情况下才会立即/同步返回。仅凭您共享的代码是无法判断的,因为您尚未共享填充主题的部分(例如调用 next),但这似乎是最可能的解释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      相关资源
      最近更新 更多