Я могу отменить ожидающий HTTP-запрос (используя .unsubscribe), но после этого он не вызовет мой fromEvent (this.searchInput.nativeElement, 'keyup').Как мне справиться с этим?
Я использую "fromEvent (this.searchInput.nativeElement, 'keyup')" для получения результатов поиска.Но если есть ожидающий запрос HTTP, и пользователь очищает поле, я хочу отменить запрос (я попытался отписаться, и это работает).Но после этого «fromEvent» не сработает.Есть идеи, как с этим справиться?
fromEvent(this.searchInput.nativeElement, 'keyup')
.pipe(
map((event: any) => {
if (event.keyCode === 17 || event.keyCode === 91 || event.keyCode === 37 || event.keyCode === 38 || event.keyCode === 39 || event.keyCode === 40 || event.keyCode === 13 || event.keyCode === 27) {
return;
}
return event.target.value;
}),
filter((query: any) => {
if (query === '') {
this.loading = false;
this.searchedResult = [];
}
return query && query.length > 0;
}),
debounceTime(300)
,distinctUntilChanged((p, c) => {
return !!this.searchedResult && this.searchedResult.length > 0 && (p == c);
})
, switchMap(query => {
query = query.trim();
this.loading = true;
return this.cartService.searchItemByName(encodeURIComponent(query), this.shopID.shop_id.toString()).pipe(
catchError(err => {
this.toaster.error(err.error.message || "Something went wrong!");
return of([]); //in case of error let’s emit an empty array
})
);
})
).subscribe((res: any) => {
let data = res.result;
this.loading = false;
this.searchedResult = data;
if (data && data.length) this.setSelectedItem(data[0], 0)
})