0

Я пытаюсь построить Observable из FirebaseObjectObservable, но сначала я должен запросить список Firebase, чтобы получить каждый ключевой идентификатор для этого FirebaseObjectObservable.Присоединяйтесь к 2 или более объектам Firebase

Моя структура данных

players { 
    player_1 { 
     carsKeys: { 
     car_id_1: true, 
     car_id_2: true, 
     car_id_3: true 
     ..... 
     } 
    }, 
    player_2 { 
     ... 
    } 
} 

cars { 
    car_id_1 { 
     property_1 : '123', 
     property_2 : '456', 
     ... 
    }, 
    car_id_2 { 
     ... 
    } 
    ... 
} 

I'am желающих подписаться только один Observable и получить массив объектов, похожее на это:

cars: Array[5]: [ 
        { 
        id: car_id_1, 
        property_1 : '123', 
        property_2 : '456', 
        ... 
        }, 
        { 
        id: car_id_2, 
        ..... 
        }, 
        .... 
       ] 

Моя сервисная функция выглядит следующим образом:

public getCars(player_id){ 
    return this.db.list('players/' + player_id + '/carsKeys/') 
      .map(carsKeys => carsKeys 
       .map(key => this.db.object('cars/' + key))) 
      .flatMap(carsObjs => Observable.combineLatest(carsObjs)) 
} 

Я пробовал много сочетаний, но ничего не работает: мне нужна эта структура данных и поэтому мне нужно синхронизировать с базой данных.

ответ

0

Посмотрим, правильно ли я правильно понял ваш вопрос.

  1. Получить ключи от машины из игроков выбраны игроком
  2. ключей Преобразовать автомобили в массив для легкой манипуляции
  3. Скрытого автомобиль ключи массива индивидуального наблюдаемого потока
  4. Получить каждый ключ автомобиля деталь из таблицы автомобилей
  5. Сделать это как набор ключей от машины

Вот пример кода. Заменить эту часть запроса на запрос вашей базовой бомбы https://jsbin.com/hokayilulu/edit?js,console,output

const players$ = Rx.Observable.of(players) 
    .map(x => players[Object.keys(x).find(x=> x === 'player_1')]) 
    .map(x => Object.keys(x.carsKeys)) 
    .switchMap(x => Rx.Observable.from(x)) 
    .map(x => cars[x]); 

let result = [] 
players$.subscribe(x => { 
    result.push(x); 
    console.log(result) 
}) 
Смежные вопросы