При использовании трубы "shareReplay" используется ширина, а HttpClient.get должен быть горячим или холодным. - PullRequest
0 голосов
/ 07 октября 2019

При использовании канала shareReplay в HttpClient.get Observable быть горячим или холодным? Нужно ли отписываться от подписки, используя его?

Мне просто нужно вызвать его в другом сервисе и установить переменную в методе init. Просто подумайте, нужно ли мне запустить отписку или она завершена. Тогда мне не нужно добавлять функцию очистки.

 // RolesService
constructor(private http: HttpClient)
...
// will this return a cold or hot observable
getRoles():Observable<Role[]> {
  return http.get<Role[]>("roles url", {}).pipe(shareReplay(1));
}
// A caller an other service
checkRole() {
  this.roleSubscribe = this.roleService.getRoles().subscribe(r => 
       this.handleRoles(r));
}

cleanUp() {
  // is this already done or complete so i don't need to do this?
  this.roleSubscribe.unSubscribe();
}

1 Ответ

2 голосов
/ 07 октября 2019

Angular s http возвращает Cold Observables. Любые новые подписки будут запускать выполнение еще раз (это означает, что запрос будет отправлен столько раз, сколько существует подписок).

Чтобы избежать этого, используйте share, shareReplay, publish, publishLastили publishReplay

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