Я пытаюсь выучить rxjs и концепцию Observable в целом, и у меня есть сценарий, в котором у меня есть класс <Room>{}
, где <Player>{}
может объединяться в стиле отношения многих ко многим.
В Firestore у меня есть коллекция rooms
, где у каждой комнаты есть свойство с именем players
, которое является массивом пользователя uid
s.
Когда создается компонент комнаты, я подписываюсь на _roomService.getPlayersInRoom(roomId)
, который выглядит следующим образом:
getPlayersInRoom(roomId: string) {
return this._db.doc<Room>(`rooms/${roomId}`).valueChanges().pipe(
map(room => room.players),
switchMap(players => players),//2
switchMap(playerId => {
if(playerId) {
return this._db.doc<Player>(`users/${playerId}`).valueChanges();
}
})
);
}
Я подпишусь на него позже с
.subscribe(player => {
if (player) {
this.players = new Array();
this.players.push(player);
}
Здесь есть пара вопросов. Моя наблюдаемая не возвращает массив игроков, как ожидалось (см. Строку // 2, которая преобразует строку [] в строку)
Другая проблема заключается в том, что я обновляю массив this.players
в своем компоненте каждый раз, когда меняется комната (в противном случае .push()
будет выдавать дубликаты.
Я прочитал документацию по некоторым из этих операторов и понимаю их несколько, но недостаточно, чтобы понять, почему этот код не ведет себя так, как должен.