Получить предыдущее и текущее значение из HTTP-вызова Angular2

У меня есть сценарий, в котором мне нужно сравнить значения, полученные при первоначальном вызове службы и при вызове новой службы для одного и того же URL-адреса.

Класс обслуживания:

getXRate(): Observable {
   return this.http.get('someURL').subscribe((data) => { return data.json(); } );
}

Теперь, в Component 1, я вызываю эту службу в ngOnInit, как показано ниже:

ngOnInit(){
   this.service.getXRate().subscribe(data => this.r = data.r);
}

// На данный момент у меня есть первое значение

Теперь в component 2 тот же метод вызывается, чтобы проверить, есть ли разница между значением, возвращаемым в Component 1.

Как я могу этого добиться?

Я пробовал использовать ReplaySubject и BehaviorSubject, но у меня ничего не вышло.


person Gags    schedule 30.07.2017    source источник
comment
Можете ли вы сказать, почему вы хотите сравнить, может быть, есть лучший способ сделать это   -  person Vamshi    schedule 30.07.2017
comment
Мне нужно сравнение, чтобы предупредить пользователя об изменении x Rate. Если да, он должен принять   -  person Gags    schedule 30.07.2017


Ответы (1)


У вас есть служба для хранения последних полученных данных и использования их в ваших компонентах.

Ваш существующий код (обратите внимание, что вы подписались на подписку в данном примере).
Некоторые «услуги»:

lastObject: any;

storeLast(lastObject:any){
  this.lasObject = lastObject;
}

getLastObject(){
  return this.lastObject;
}

getXRate(){
  return this.http.get('url').map(res => res.json());
}

Компонент 1:

ngOnInit(){
  this.service.getXRate().subscribe(res => this.service.storeLast(res));
}

Компонент 2:

getAndCompareLast(){
  let object = this.service.getLastObject();
  this.service.getXRate().subscribe(res => { //Do some compare logic...});
}
person Dan R.    schedule 30.07.2017
comment
как насчет использования HTTP-кеширования? Вы можете дать мне какие-нибудь примеры для этого? - person Gags; 30.07.2017
comment
Кэширование не имеет ничего общего со сравнением сохраненных данных, в данном случае конкретно - person Dan R.; 03.08.2017