Estoy tratando de recuperar una lista de perros de una base de datos. Quiero recuperar la lista de perros como Observable<Dog[]> . Sin embargo, cuando llamo a Array() o uso cualquier otro método para intentar convertir el flujo entrante en una matriz, no recibo datos cuando llamo al método retrieveDogs(dogsId) . ¿Cómo se hace para recuperar una Observable array en lugar de solo una Observable stream ?
retrieveDogs(dogIds : Array<string>): Observable<Dog[]>{ return Observable.from(dogIds) .map(dogId => this.retrieveDog(dogId)) .flatMap(dogObservable => dogObservable) .toArray(); } retrieveDog(dogId : string) : Observable<DogEntity> { //afDB -> AngularFireDatabase that returns an observable with the data from the firebase database return this.afDB.object(DB_DOGS + DB_DASH + dogId) .map(dogObject =>DogEntity.convertObject(dogId,dogObject) }Podrías hacer eso para recuperar tus datos:
retrieveDogs(dogIds : Array<string>): Observable<Dog[]>{ let obs = dogIds.map(dogId => this.retrieveDog(dogId)); return Observable.forkJoin(obs); } retrieveDog(dogId : string) : Observable<DogEntity> { return this.afDB.object(DB_DOGS + DB_DASH + dogId) .map(dogObject => DogEntity.convertObject(dogId,dogObject)); }Demostración simple aquí http://jsbin.com/sotunopocu/2/edit?js,console