Как узнать, было ли изменено наблюдаемое значение или было установлено конечное значение - PullRequest
0 голосов
/ 25 декабря 2018

У меня есть переменная типа returnDate: Observable<string>, значение которой задается другой функцией типа Observable, которая выглядит примерно так:

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

Теперь, как я могу обнаружить или узнать, было ли изменено значение returnDateили если наблюдаемое получило другое значение.По сути, я изменяю даты с помощью этих наблюдаемых, поэтому мне нужно знать для конкретного объекта (this.data.Date), было ли заданное значение изменено (наблюдаем.next), или, возможно, существует вспомогательная функция, такая как final / finalaizeдля наблюдаемых.

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

если вы каждый раз возвращаете 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, потому что он может содержать значение, а также вы можете установить начальное значение предмета

Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать.

0 голосов
/ 09 апреля 2019

Хотя из кода, которым вы поделились, трудно понять, как именно вы это делаете.Но что касается вашего вопроса -

, поэтому мне нужно знать для конкретного объекта (this.data.Date), было ли заданное значение изменено

InВ случае наблюдаемых rxjs существует оператор DifferentUntilChanged, который служит точно такой же цели.Читайте здесь .

Излучайте только тогда, когда текущее значение отличается от последнего.

Пример решения

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

Посмотрите, работает ли это для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...