我正在使用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 []>。
我怎样才能做到这一点?
我强烈建议构建一个选择器来获取修改后的消息,因为它会使状态选择逻辑不在你的服务之内。
例如:
// ...
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 });
});
}
);
// ...