Я хочу сопоставить значения массива из 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;
)