0

Ich versuche ein Observable aus FirebaseObjectObservable zu erstellen, aber zuerst muss ich eine Firebase-Liste abfragen, um alle Schlüssel-IDs für dieses FirebaseObjectObservable zu erhalten.Bei 2 oder mehr Firebase Observables teilnehmen

Meine Datenstruktur

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 { 
     ... 
    } 
    ... 
} 

Ich bin zu wollen nur eine beobachtbare abonnieren und ein Array von Objekten ähnlich wie diese zu erhalten:

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

wie Meine Servicefunktion aussieht:

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)) 
} 

Ich habe viel Kombination ausprobiert, aber nichts funktioniert: Ich brauche diese Datenstruktur und al also muss ich mit der Datenbank synchronisiert werden.

Antwort

0

Mal sehen, ob ich deine Frage richtig bekomme.

  1. Get Autoschlüssel vom Spieler ausgewählten Spieler
  2. Convert Autoschlüssel auf ein Array für die einfache Handhabung
  3. Covert Autoschlüssel Array auf einzelne beobachtbare Strom
  4. jeder Autoschlüssel Details von Autos Tabelle Get
  5. Machen Sie es als Autoschlüssel Array

Hier ist Codebeispiel. Ersetzen Sie diese Abfrage Teil mit Ihrer Feuerbasis Abfrage 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) 
}) 
Verwandte Themen