mergeMap之后的最终单个操作?

时间:2019-06-19 09:21:26

标签: angular rxjs

我有这样的信息流:

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);
}

1 个答案:

答案 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();