Привет. У меня проблемы с подпиской на тему и поисковым вызовом. Я хочу отменить предыдущий звонок в пользу текущего. Я выполнил поиск по предыдущим темам, но не смог найти ответ.
Я знаю, что должен использовать switchMap (), но у меня ничего не получилось. Все звонки продолжаются независимо от состояния. Я думаю, что это должно быть связано с тем, как я настроил вещи, потому что я не возвращаю ответ, который я устанавливаю. Так что нет единой наблюдаемой ссылки ..?
Вся помощь приветствуется!
Пожалуйста, смотрите код ниже:
ngOnInit() {
// I subscribe to the Subject Observable here
this._searchService.quickSearch$
.pipe(
debounceTime(1000),
distinctUntilChanged()
)
.subscribe(
// when value has changed I call runSearch
(queryString) => {this.runSearch(queryString);
}
);
}
runSearch:
runSearch(searchString: any) {
this.quickSearch.runSearch(searchString).pipe(
//Not working as expected
switchMap(() => {
console.log('switchMap has bee fired');
return this.quickSearch.runSearch(searchString);
})
).subscribe(
(response) => {
// set the two way bind here
this.apiResponse = response;
},
(error) => {
console.log('ERROR!!!');
},
() => {
// this is fired when the observable is closed
console.log('I have been unsubscribed');
}
);
}
служба быстрого поиска:
runSearch(search: string): Observable<QuickSearch[]> {
...
return this.http.get<QuickSearch[]>(this.api.url, { params: param, headers: header })
.pipe(
map((data: any) => {
return data.map((item: any[]) => this.adapter.adapt(item));
}
),
catchError(error => error)
);
}
Спасибо
ОБНОВЛЕНИЕ
Я до сих пор не нашел ответа на этот вопрос. Я собираюсь перефразировать это.
У меня есть 5 частей к этому:
Input box ([])->
rxjs-Subject (input-text)->
runSearch(input-text) -> [ handles response ]
_service.runSearch(input-text) ->
http().get(input-text) => response
при изменении поля ввода вызывается запуск поиска, в котором служба поиска тоже подписана, это не возвращает