如何知道是否设置了Observable更改值或最终值

问题描述 投票:0回答:1

我有一个类型为returnDate: Observable<string>的变量,其值是从Observable类型的另一个函数设置的,它看起来像:

getDates(): Observable<string> {
   return new Observable((observer) => { 
   observer.next(moment(this.data.Date).format('DD MMM'));}
   });
 }

现在我如何检测或知道returnDate值是否已更改或者observable是否已收到另一个值。基本上我用这个observable更改日期所以我需要知道一个特定的对象(this.data.Date),如果给定的值已经改变(observer.next)已经完成,或者可能有一个辅助函数,如final / finalaize对于观察者。

angular typescript observable angular7 angular-observable
1个回答
0
投票

虽然从代码中难以理解,但您分享了您是如何做到这一点的。但就你的问题而言 -

所以如果给定的值已经改变,我需要知道一个特定的对象(this.data.Date)

在rxjs observables的情况下,有一个运算符distinctUntilChanged用于完全相同的目的。阅读here

仅在当前值与最后一个值不同时才发出。

一个示例解决方案

getDates.pipe(distinctUntilChanged())
  .subscribe(data => console.log("This will only hit if data changed"));

看看它是否适合你。


0
投票

如果你每次都返回一个你订阅的new Observable(),你将获得不同的值,例如你返回一个return new Observable(Math.random()*10),你订阅了2个组件,你将获得不同的值,但我认为你需要获得相同的值,所以对于这个场景使用Subject()

首先,您必须声明它然后设置值然后返回this.subject.asObservable()这使您有机会订阅此主题。

简单的例子

  // set initial value to subject, ussualy set data above constructor
  dataSubject = new BehaviorSubject(null);

  // then you get data from server
  // response can be data from serve or data from eventEmitter whatever you need

  this.dataSubject.next(response);

  // then return this subject

  return this.dataSubject.asObservable()

在这种情况下,使用BehaviorSubject因为它可以保存值,您也可以设置主题的初始值

如果您有更多问题,请随时提出。

© www.soinside.com 2019 - 2024. All rights reserved.