mergeMap Observable со значением массива - PullRequest
0 голосов
/ 02 января 2019

Я хочу сопоставить значения массива из Observable с дополнительными данными.

Например: у меня есть команда (пользователей), а значения, которые я получаю от сервиса, содержат массив пользователей.Но прежде чем назначить этот список локальной переменной, я бы хотел добавить дополнительные данные к объектам User (скажем, количество целей, которые поставил пользователь).

public team: Array<User> = [];

this.userService.getCurrentTeam()
  // the result is an array of users: [{id: 1, name: 'John'}, {id: 6, name: 'Jane'}, ...]
  .mergeMap(people => people) // flatten the array
  .mergeMap(person => {
    return this.gameService.getGoalsForUser(person);
  }).subscribe((team) => {
    this.people = team; // this won't work: see below
  });

Как результат getCurrentTeam ()это массив пользователей, мне сначала нужно разбить (сгладить) этот массив (сделано с первым mergeMap), чтобы иметь возможность получить цели для каждого пользователя в функции mergeMap.

Чтобы заставить вышеуказанный блок работатьфункция подписки должна быть переписана, так как переменная team больше не является массивом:

subscribe((person) => { this.team.push(person); } );

Проблема этой подписки заключается в том, что всякий раз, когда данные изменяются, дубликат пользователя может быть помещен в массив команды.

У меня есть два вопроса относительно этой концепции:

  • Как я могу сделать дополнительные запросы для отдельных пользователей, не разбивая массив (в первой функции mergeMap)
  • Могу ли я сохранить свой массив в функции подписки?(this.people = team;)
...