Используйте pluck
для сопоставления с данным атрибутом (в данном случае с вашим массивом статей). Используйте switchMap
для отображения в Observable, который получает все теги и сопоставляет их с измененным массивом статей.
Вы уверены, что вам нужно take(1)
? Если this.apiBaseService.get<GetArticlesResponse>('getBlogArticles')
- это http-запрос, который отправляется только тогда, когда он вам не нужен.
Я думаю, что это должно делать то, что вы хотите:
public getArticles(): Observable<AlArticleShort[]> {
return this.apiBaseService.get<GetArticlesResponse>('getBlogArticles').pipe(
pluck('shortArticlesInfo'),
switchMap(articles => this.getAllArticlesTags$().pipe(
map(tags => {
articles.foreach(a => a.tags = tags.filter(tag => a.tagIds.includes(tag.id)));
return articles;
})
))
);
}