Rxjs подписка только на последний запрос
Как правильней и лучше всего реализовать подписку только на последний запрос? Например:
- Отправляем запрос. Он обрабатывается долго.
- Отправляем повторно второй запрос и получаем сразу ответ. Обрабатываем его в subscribe.
- Вдруг прилетает ответ на первый запрос и его уже обрабатывать не нужно.
Сделал так (вырезка из Angular)
private lastRequestTime = Date.now();
getData() {
const date = Date.now();
this.lastRequestTime = date;
this.dataService
.getData()
.pipe(
takeWhile(() => this.lastRequestTime === date),
)
.subscribe(response => {
// do something
});
}
Но думаю есть более лаконичный подход. Как правильней?
Ответы (2 шт):
Автор решения: user447630
→ Ссылка
Если вам необходимо отлавливать последний запрос воспользуйтесь Debounce
Автор решения: Yugofx
→ Ссылка
Вообще стандартная стратегия HttpClient - это канселить PENDING REQUEST. Если это какая-то своя тема на rxjs, то простого take(1) будет достаточно, если надо только первое значение из стрима.
Опять же, если ваша getData состоит из пачки разных запросов, и нужен только первый, можно заюзать race.
return race(
timer(5000).pipe(mapTo('slow')),
timer(2000).pipe(mapTo('faster')),
timer(1000).pipe(mapTo('fastest')) // подписка создастся только на этот стрим, остальные игнорятся
)