我有一个方法,该方法应该在Observable内部返回一个数组。我应该对数组进行一些更改,直到该数组返回之后。现在,我仅返回类型为AlArticleShort
的一个元素。如何返回类型为AlArticleShort[]
的数组?
Response.shortArticlesInfo
是类型为AlArticleShort
的对象数组。我必须对该数组执行一些操作,然后返回修改后的数组。
public getArticles(): Observable<AlArticleShort[]> {
return this.apiBaseService.get<GetArticlesResponse>('getBlogArticles').pipe(
take(1),
switchMap(response => {
return response.shortArticlesInfo;
}),
map(article => {
this.getAllArticlesTags$().subscribe(tags => {
console.log(tags);
return article.tags = tags.filter(tag => {
return article.tagIds.includes(tag.id);
});
});
return []
}),
);
}
答案 0 :(得分:0)
通过使用map
而不是mergeMap
或switchMap
,可以避免使用第二个管道。
此外,如果您只想订阅标签一次,则可以使用withLatestFrom
。
最终结果应类似于:
public getArticles(): Observable<AlArticleShort[]> {
return this.apiBaseService.get<GetArticlesResponse>('getBlockArticles').pipe(
take(1),
withLatestFrom(this.getAllArticlesTags$()),
map(([{ shortArticlesInfo }, tags]) =>
shortArticlesInfo.map(article => {
return {
...article,
tags: tags.filter(tag => article.tagIds.includes(tag.id))
}
})
)
)
}