Vous pouvez créer un convertisseur
const mapToFirebaseListObservable = (source) => {
new FirebaseListObservable(observer => {
return source.subscribe({
next(x) { observer.next(x); },
error(err) { observer.error(err); },
complete() { observer.complete(); }
})
})
}
Utilisez-le avec
var firebaseList = mapToFirebaseListObservable(
loggedInUserId
.flatMap((userId) => this.db.list(this.firebaseRoot.child(userId)))
)
Je ne l'ai pas essayé sur une firebase installation complète, de sorte que vous pouvez obtenir un newing d'erreur up FirebaseListObservable, mais je l'ai essayé avec un Observable avec une fonction ajoutée
const newObservable = new Observable(observer => {
...
})
newObservable['myFn'] =() => 'from myFn'
et la fonction est présente et appelable sur la sortie.
EDIT: Cela semble également travailler
const toInner = (source) => {
return source.operator && source.operator.project
? source.operator.project()
: source
}
Utilisation:
var firebaseList = toInner(
loggedInUserId
.flatMap((userId) => this.db.list(this.firebaseRoot.child(userId)))
)
Il pourrait également être transformé en un opérateur enchaîné
const toInner = function() {
const source = this
return source.operator && source.operator.project
? source.operator.project()
: source
}
Observable.prototype.toInner = toInner;
Voir aussi here pour Rxjs v5.50beta sur les modifications apportées à la création d'opérateurs .
C'est impossible. Voir mes commentaires dans [ce] (https://github.com/angular/angularfire2/issues/1008#issuecomment-304510732) AngularFire2 question pour une explication. N'hésitez pas à adapter les commentaires et [self-answer] (https://stackoverflow.com/help/self-answer) à votre question. – cartant