行为主题:如果 next() 未触发,则忽略最后一个值



在我的应用程序中,我正在使用行为主题将数据从提供商传递到页面组件:

jobsmanager

  private futureJobsSource = new BehaviorSubject <Array<Job>>([]);
  futureJobsUpdate = this.futureJobsSource.asObservable();

来源更新的地方:

 getFutureJobs(date: string) {
//
//
this.api.getFutureJobs(request).subscribe((res) => {
      console.log(this.TAG + 'getFutureJobs: success: ' + JSON.stringify(res));
      this.futureJobsSource.next(res);
    }, (err) => {
      console.log(this.TAG + 'getFutureJobs: failure: ' + JSON.stringify(err));
      this.message.showErrorAlert(err.detail);
    });
}

和我的组件, futureJobSpage

 setSearchDate() {
    DatePicker.show(this.datePickerOptions).then((date) => {
      this.jobsManager.getFutureJobs(moment(date).format('MM/DD/YYYY'));
    });
  }
ionViewDidLoad() {
    console.log('ionViewDidLoad FutureJobsPage');
    this.subscription = this.jobsManager.futureJobsUpdate.subscribe((res) => {
      console.log(this.TAG + 'subscribe: ' + JSON.stringify(res));
      this.futureJobs = res;
    });
  }
 ionViewDidLeave() {
   console.log(this.TAG + 'ionViewDidLeave');
   this.jobsManager.futureJobsUpdate.distinctUntilChanged();
   this.subscription.unsubscribe();
   this.futureJobs = [];
 }

我从我对正确的方法中传递数据的方法的搜索中了解到,从提供者行为主题是一个最佳解决方案,但是如果不是从下一个(((,我想省略最后一个接收的值。实现这种行为的最佳实践是什么?

使用Subject代替BehaviorSubject,订阅仅在第一次发射后才开始。

acrapiorSubject

受试者的变体之一是行为对象,它具有 "当前价值"的概念。它存储发出的最新值 它的消费者,每当新观察者订阅时,它都会 立即从行为主题接收"当前值"。

希望这会有所帮助!

相关内容

  • 没有找到相关文章

最新更新