Использование shareReplay (1) в Angular - все еще вызывает http-запрос? - PullRequest
0 голосов
/ 26 июня 2018

Я создал демо ( ng-run ), где у меня есть кнопка, которая вызывает запрос Http.

Когда кнопка нажата, я вызываю этот метод:

public getData(){
 this._jokeService.getData().subscribe();
}

Что, в свою очередь, вызывает это (из службы):

 public getData() {
    return this.http.get(API_ENDPOINT).pipe(shareReplay(1))
  }

Проблема в том, что при каждом клике я все еще вижу инициированный новый http-запрос:

enter image description here

Вопрос:

Почему shareReplay не сохраняет последнее значение ответа?
Как я могу заставить свой код вызывать http только один раз и сохранять это значение для будущих подписок?

Редактировать: решение здесь

1 Ответ

0 голосов
/ 26 июня 2018

Если вы звоните каждый раз this.http.get(API_ENDPOINT).pipe(shareReplay(1)), каждый раз будет срабатывать http-запрос. Если вы хотите сделать http-вызов один раз и кэшировать данные, рекомендуется следующее.

Сначала вы получаете наблюдаемые данные:

 ngOninit(){
    this.data$ =  this._jokeService.getData().pipe(shareReplay(1));
    }

Теперь подписывайтесь несколько раз:

 public getData(){
     this.data$.subscribe();
    }

Ваш сервис:

public getData() {
    return this.http.get(API_ENDPOINT)
  }
...