我有这样的信息流:
this.myService.getUsersFromServer().pipe( // gets all users
concatAll(), // concat for Api calls
filter((user) => user.role === "moderator") // filter in moderators
mergeMap((user) => this.myService.deleteUser(user.id)) // delete all moderators
).subscribe();
我现在要做的是在订阅之前进行最终的api调用,以更新用户列表,如下所示:
[...], // delete all moderators
finalCallOperator(() => this.myService.getUsersFromServer())
我的问题
在列出一系列操作后,我应该使用哪个操作员进行单个呼叫?如果在这种情况下使用switchMap
,则将执行this.myService.getUsersFromServer()
的多个执行,除了最后一个执行,所有其他执行都被取消。
编辑
getUsersFromServer
函数的代码:
getUsersFromServer() {
let req = new HttpRequest<Users[]>(
'GET',
`/users`
);
return this.http.request<Users[]>(req);
}
答案 0 :(得分:4)
尝试以下操作:
this.myService.getUsersFromServer().pipe(
// map to filtered array
map(users => users.filter(user => user.role === "moderator")),
// map to array of delete HTTP requests
map(users => users.map(user => this.myService.deleteUser(user.id)),
// flatten + run in parallel
mergeMap(deleteRequests$ => forkJoin(deleteRequests$)),
// map to users request
mergeMap(() => this.myService.getUsersFromServer())
).subscribe();