как видите, есть несколько различных решений вашей проблемы. Мой совет - продолжать использовать наблюдаемую цепочку и подождать, пока не закончит getMatchs. Например:
ngOnInit(): void {
this.getMatchs().subscribe(res => this.getUsers());
}
, тогда вам придется изменить свои функции getmatchs следующим образом:
getMatchs() {
this._matchService.getMatchs().pipe(
tap(result => {
this.matchs = response.matchs;
this.games = this.matchs.map(m => m.game);
})
);
Делая это, вы продолжаете использовать наблюдаемый поток.
Это должен работать, но есть и другие проблемы, о которых вам следует знать. Один из них заключается в том, что это очень хорошая практика - отказываться от каждой подписки, которую вы хотите, чтобы избежать утечки памяти в вашем приложении. Вы можете сделать это, позвонив по номеру unsubscribe()
вручную или воспользовавшись трубкой async
из angular.
https://rxjs-dev.firebaseapp.com/guide/subscription
https://angular.io/api/common/AsyncPipe
С другой стороны, вы получите лучшую производительность, если сможете изменить свой код, чтобы уменьшить количество циклов, которые вы выполняете над той же информацией. Ознакомьтесь с другой версией GetMatchs, которую я делал для вас (не тестировался), но, надеюсь, может дать вам представление о том, как улучшить производительность вашего компонента:
processMatches() {
this._matchService.getMatches().pipe(
tap(response => {
this.matches = response.matchs;
let accountId = {};
this.matches.forEach((m, index) => {
this.game[index] = m[index].game;
this.game[index].participantIdentities
.forEach(p => {
if (!accountId[p.player.sumonerName]) {
accountId[p.player.sumonerName] = p.player.sumonerName;
this.player.push(p.player);
}
});
});
})
)
}
Опять же, этот код не тестировался идея состоит в том, чтобы уменьшить количество циклов, а также преобразовать массив accountId в объект, чтобы проще и быстрее проверять дубликаты.
Удачного кодирования!