异步修改数组的可观察项中的每个项并返回修改后的observable

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

我正在使用ngrx在Angular中构建一个服务,该服务在商店中查找消息列表。一旦有了列表,它就需要为每条消息获取一些异步数据,并定义一个新对象(ModifiedMessage)。该服务应返回带有已修改消息列表的observable。

我的尝试:

getMessages(): Observable<ModifiedMessage[]> {
        return combineLatest(
          this.store.select(MessageSelectors.getListOfMessages),
        ).pipe(
          map(([messages]) => {
            return messages.map(message => {
              return this.store
                .select(MessageSelectors.getUserForMessage(message.userId))
                .pipe(
                  take(1),
                  map(user => {

                    return new ModifiedMessage({
                      id: message.id,
                      user: user.name,
                    });
                  })
                );
            });
          })
        );
      }

这不起作用,因为TypeScript抱怨我返回Observable []>而不是Observable []>。

我怎样才能做到这一点?

angular typescript observable
1个回答
0
投票

我强烈建议构建一个选择器来获取修改后的消息,因为它会使状态选择逻辑不在你的服务之内。

例如:

// ...
static getListOfModifiedMessages = createSelector(
  MessageSelectors.getListOfMessages,
  MessageSelectors.getUsers,
  (messages, users) => {
    return messages.map(({ id, userId }) =>
    {
      const { name } = users.find(user => user.id === message.userId);
      return new ModifiedMessage({ id, name });
    });
  }
);
// ...

推荐问答