Вместо этого вы можете попробовать использовать операторы RxJS, такие как switchMap , map и tap , чтобы управлять потоком наблюдаемого, включая выполнение побочных эффектов, таких как установка классаproperties.
В этом ответе предполагается, что в forEach () есть только один текущий пользователь, полученный из if (current.name === userSession) {
, и, следовательно, this.friendsService.getFriends(user.id)
выполняется только один раз.
import { map, switchMap, tap } from 'rxjs/operators'; // need to import operators
// ...
this.listUserService.getUsers().pipe(
tap(users => this.listUsers = users), // side effect to set this.listUsers
map(users => users.find(user => user.name === userSession)), // find current user
switchMap(user => this.friendsService.getFriends(user.id)), // get friends of current user
tap(friends => this.friends = friends), // side effect to set this.friends
map(friends => this.listUsers.filter(user => this.friends.some(relationship => relationship[0].friend.id !== user.id)))
).subscribe(listUsers => {
this.listUsers = listUsers;
});
Вам следуетОбязательно просмотрите документацию RxJS для получения дополнительной информации и примеров различных операторов.Также вам обязательно нужно улучшить обработку ошибок в случае, если текущий пользователь не найден или какой-либо из вызовов service / api завершится неудачей.
Надеюсь, это поможет!