Ngrx 将项目的多个操作拆分为项目的多个操作



我正在尝试制作一个Ngrx效果,加载来自多个用户的帖子。我已经有一个加载一个用户帖子的工作效果。如何将 LoadUsersPosts 效果拆分为多个 LoadUserPosts 效果?

这就是我现在正在尝试的。

@Effect() loadUsersPosts$ = this.actions$
.ofType(LOAD_USERS_POSTS)
.mergeMap((action: LoadUsersPosts) => {
const array = [];
action.payload.forEach(user => {
array.push(new LoadPosts(user));
});
return array;
});

我已经在forEach中放置了一些控制台.log但似乎甚至没有执行它。

听起来您要执行的基本任务是转换并单独发出可观察流中的数组中的值。您可以像现在一样进行转换,尽管map会比forEach更简单。然后,您只需使用from从结果数组创建一个可观察量,该数组将按顺序发出每个值。下面是一个简化的运行示例:

Rx.Observable.of([1,2,3,4,5])
.mergeMap(x => {
const transformed = x.map(y => y * 2);
return Rx.Observable.from(transformed);
})
.subscribe(x => { console.log(x); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.10/Rx.min.js"></script>

这可以通过以下代码实现

@Effect()
loadUsersPosts$ = this.actions$
.ofType(LOAD_USERS_POSTS)
.pipe(
switchMap((action: LoadUsersPosts) => from(action.payload)),
map(user => new LoadPosts(user))
);

这里 switchMap 运算符将使用 "from" 将基于"action.payload"数组将外部可观察量转换为多个内部可观察量 可观察量创建者

"from" 可观察创建者将创建可观察流,通过一次发射一个值从数组创建可观察流

地图操作员会将其转化为行动

mergeMap 将为所有请求提供输出,而 switchMap 将取消除最新请求之外的所有请求

最新更新