В настоящий момент я сталкиваюсь с проблемой, когда первый поиск может занять 5 секунд, а второй, который занимает 2 секунды, проблема в том, что первый поиск, который занимает больше времени, «сотрет» результаты выполненного запроса.после, потому что вызовы заканчиваются после.
Я пытался прочитать о
switchMap
в rxJs и пытался использовать его, но из того, что я пытаюсь, он не отменяет подписку на предыдущий запрос и стирает результат.
Возможно, здесь что-то не так, но я не могу точно указать, в чем проблема.
Слияние имеет 3 источника изменения результата (разбивка на страницы, сортировка или новые критерии поиска), и вызов sendSearchCriteria возвращает используемые данные.
sendSearchCriteria возвращает Observable
* 1018.*
есть что-нибудь, что вам приходит в голову, что я делаю не так?
Спасибо за вашу помощь,
private loadDogsResults = (filtersInformation: FilterSearchCriteria) => {
merge(this.sort.sortChange, this.paginator.page, of(filtersInformation))
.pipe(
distinctUntilChanged(),
tap(() => (this.isLoading = true)),
switchMap(() => this.sendSearchCriteria(filtersInformation)),
//mergeMap(() => this.sendSearchCriteria(filtersInformation)),
map(data => this.formatResults(data)),
finalize(() => (this.isLoading = false)),
catchError(error => this.handleError(error)),
takeUntil(this._onDestroy$)
)
.subscribe((result: any[]) => {
if (result.length > 0) {
this.setDisplayedColumns(result[0]);
}
this.isLoading = false;
});
}