Окончательная операция после слияния? - PullRequest
1 голос
/ 19 июня 2019

У меня есть такой поток:

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(), все отменены, кроме последнего.

EDIT

Код функции getUsersFromServer:

getUsersFromServer() {
  let req = new HttpRequest<Users[]>(
    'GET',
    `/users`
  );

  return this.http.request<Users[]>(req);
}

1 Ответ

4 голосов
/ 19 июня 2019

Попробуйте со следующим:

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...