2017-07-05 6 views
1

j'utilise forkJoin de combiner les résultats de deux demandes Firebaseforkjoin Aucun résultat

Les deux demandes complètes et connectez-vous au sein de la console, mais la fonction de carte pour le forkJoin lui-même ne se déclenche pas et par conséquent, aucun résultat ne retourne à l'application

public initGroup(groupname, username){ 
    console.log(groupname, username)//This logs 
    return Observable.forkJoin([ 
     this.getGroup(groupname, username), 
     this.groupMembers(username, groupname), 
    ]) 
    .map((data)=>{ 
     console.log(data)//This does not log 
     this.group = data; 
     return this.group 
    }) 
} 

Et pour les différentes fonctions:

public getGroup(groupname, username){ 
    return (this._af.database.object('/groups/'+groupname) as FirebaseObjectObservable<any>) 
     .map((group)=>{ 
     console.log(group)//This logs 
     return group 
    }) 

} 
public groupMembers(username, groupname){ 
    return this.afService.getUserItems(groupname) 
    .map((users:UserInfo[])=>{ 
    console.log(users)//This logs 
    return users 
    }) 
} 

Je souscris dans le composant:

let conn = this.groupService.initGroup(groupname, username) 
        .subscribe((data)=>{ 
        console.log(data)//Does not log 
        ...... 
       }) 

Répondre

2

Il se trouve forkJoin ne fonctionne tout simplement pas observables Firebase,

Quand je mis à jour à

public initGroup(groupname, username){ 
    return Observable.combineLatest([ 
     this.getGroup(groupname, username), 
     this.groupMembers(username, groupname) 

    ]) 
    .map((data)=>{ 
     console.log(data)//This now logs 
     this.group = data; 
     return this.group 
    }) 


} 

combineLatest fait fonctionner comme prévu

+0

'forkJoin' fonctionne comme prévu. Il combine les dernières valeurs émises des observables * quand elles ont toutes été complétées * et les observables de Firebase ne sont pas complets. – cartant

+0

Je vois, merci de m'avoir aidé à comprendre le problème – Roy

0

Ceci est mon cas d'utilisation avec Firestore.

import { Observable } from 'rxjs/Observable'; 
import { combineLatest } from 'rxjs/observable/combineLatest'; 

constructor((){} 

getAllBudgetGroups() { 
    const loading = this.loadingProvider.presentLoader(); 
    try { 
    this.budgetGroups$ = this.budgetGroupProvider.getAllTempBudgetGroups().valueChanges(); 
    this.defaultBudgetGroups$ = this.budgetGroupProvider.getDefaultBudgetGroups().valueChanges(); 
    combineLatest(this.budgetGroups$, this.defaultBudgetGroups$).subscribe(([res1, res2]) => { 
     this.budgetGroupSortedList = concat(res1, res2); 
     this.loadingProvider.dismissLoader(loading); 
    }, err => { 
     console.log(err); 
     this.loadingProvider.dismissLoader(loading); 
     }); 
    } 
    catch (err) { 
     console.log(err); 
     this.loadingProvider.dismissLoader(loading); 
    } 
    }