javascript - 如何将 Observable 流转换为 Observable 数组

标签 javascript angular reactjs typescript observable

我正在尝试从数据库中检索狗的列表。我想检索狗的列表为 Observable<Dog[]> 。但是,当我调用 toArray() 或使用任何其他方法尝试将传入流转换为数组时,我在调用 retrieveDogs(dogsId) 时没有收到任何数据。方法。如何检索 Observable array而不仅仅是 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)
    }

最佳答案

您可以这样做来检索您的数据:

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

这里有简单的演示 http://jsbin.com/sotunopocu/2/edit?js,console

关于javascript - 如何将 Observable 流转换为 Observable 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43648449/

相关文章:

javascript - Uncaught ReferenceError : firebaseui is not defined

javascript - 从另一个 Controller 启动一个 Controller

javascript - ionic 输入 onclick in ionic 4 angular 6

angular - ionic /Angular ,如何强制客户端在每次发布后清理浏览器缓存?

reactjs - 如何将 Material ui 数据网格列排序图标设置为始终可见?

javascript - 使用堆栈跟踪记录 “Warning” 而不是 “Error”

javascript - Eonasdan/bootstrap-datetimepicker 日期时间选择器通过外部 javascript 调用重置

html - 如何阻止 <mat-expansion-panel> 用空格键触发?

javascript - 具有提升状态和受控依赖的 React 表单提交逻辑

javascript - 不变违规 : processUpdates(): Unable to find child 0 of element