可观察流,其值来自其他“一次性”Observables

问题描述 投票:1回答:1

我有一个辅助函数,它进行API调用并返回一个items数组。这些项目中的每一项代表一个实体,比方说User

每个用户都有一个category_id属性,默认为null。我想为每个用户填充此属性,从另一个辅助函数的结果中获取用户ID并返回Category对象的Observable,我可以从中提取ID,以用作用户的category_id属性。

我已经达到了以下(伪)代码(TypeScript语法,但问题一般适用于Observable运算符):

this.backend
    .request(
      'v1/users',
    )
    .pipe(
      map(items => {
        items.forEach(user => {
          this.categories.getName(user['id']).subscribe(category => {
            user['category_id'] = category['id'];
          });
        });
        return items;
      })
    )

当然,这不起作用,因为它将Observable运算符与Array函数(forEach)混合在一起。

rxjs observable rxjs-pipeable-operators
1个回答
1
投票

您不应订阅管道中的可观察对象。这是一种反模式。使用更高的observable和mergeMap与combineLatest来获得你想要的东西:

this.backend
.request(
  'v1/users',
)
.pipe(
  mergeMap(items => {
    const requestUserWithCatArray = items.map(user => this.categories.getName(user['id']).pipe(
        map(category => {
             user['category_id'] = category['id'];
             return user;
        })
    ));
    return combineLatest(requestUserWithCatArray);
  })
);

它将返回一组具有类别的用户。

© www.soinside.com 2019 - 2024. All rights reserved.