无法获取Observable数组

时间:2019-11-01 09:52:42

标签: rxjs

我有一个方法,该方法应该在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 []
    }),
  );
}

1 个答案:

答案 0 :(得分:0)

通过使用map而不是mergeMapswitchMap,可以避免使用第二个管道。
此外,如果您只想订阅标签一次,则可以使用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))
           }
        })
      )
    )
 }