Вы можете добавить канал к вызову GetItems
:
this.myservice.searchByKeyword.pipe(
switchMap(keyword => {
if (!keyword || keyword.length === 0) { // true if keyword is empty
return this.someService.GetEmptySearch();
}
return this.someService.GetItems(keyword).pipe(
map((items) => // do what you want here)
)
}),
takeUntil(unsubOnDestroy$)
).subscribe({
next: articles: Article[] => {
}
});
Кроме того, создается впечатление, что результат непосредственно используется в шаблоне. Вы можете сохранить Observable
в своем компоненте и использовать его напрямую, используя асинхронный канал. Это уменьшит накладные расходы на код с помощью takeUntil
и subscribe
:
readonly articles$ = this.myservice.searchByKeyword.pipe(
switchMap(keyword => {
if (!keyword || keyword.length === 0) { // true if keyword is empty
return this.someService.GetEmptySearch();
}
return this.someService.GetItems(keyword).pipe(
map((items) => // do what you want here)
)
})
);
Еще один момент, учитывая, что оба вызова поступают из одной и той же службы, удобнее выполнять логику с ключевым словом и отображением внутри службыи не в компоненте