Rx java 可观察与承诺相结合

Rx java 可观察与承诺相结合,rx-java,rxjs,system.reactive,reactive-programming,Rx Java,Rxjs,System.reactive,Reactive Programming,我有一个服务,MyService,它有一个方法getList,它返回一个项目数组的可观察值,比如 getList(): Observable<Item[]> 我需要的是将上述两种方法结合起来,以便MyService能够返回一个Observable,一旦所有项目都被数据填充,即一旦所有承诺都被解决,它就会发出项目列表 到目前为止,我所做的尝试都是这样的 fillAll(items: Item[]) { const promises = []; for (let i = 0

我有一个服务,MyService,它有一个方法getList,它返回一个项目数组的可观察值,比如

getList(): Observable<Item[]>
我需要的是将上述两种方法结合起来,以便MyService能够返回一个Observable,一旦所有项目都被数据填充,即一旦所有承诺都被解决,它就会发出项目列表

到目前为止,我所做的尝试都是这样的

fillAll(items: Item[]) {
   const promises = [];
   for (let i = 0; i < items.length; i++) {
      const item = items[i];
      promises.push(this.fillItem(item));
   }
   const subject = new Subject<Item[]>();
   Promise.all(promises).then(res => {
                subject.next(items);
            },
            err => {
                subject.error(err);
            });
   return subject.asObservable();
}

getListWithFilledItems() {
   return this.getList()
              .map(items => this.fillAll(items))
}
不幸的是,如果我这样做,getListWithFilledItems方法将返回一个可观察的,而不是我所希望的可观察的

任何关于如何更改代码以使getListWithFilledItems方法返回可观察值的建议都将不胜感激。

我认为,您可以使用just mergeMap代替.mapitems=>this.FillItems:

这将订阅从fillAll返回的Observable,并在准备就绪时重新提交其值


顺便说一句,请注意,您没有对内部主题调用complete,因此无法正确处理可观察链,但它在您的用例中可能并不重要。

我忘了感谢快速响应,这实际上使我的代码正常工作。我仍在努力理解为什么mergeMap可以工作而switchMap不能,但我认识到Rx和Observables是我多年来在专业领域遇到的最具智力挑战性和刺激性的东西。
fillAll(items: Item[]) {
   const promises = [];
   for (let i = 0; i < items.length; i++) {
      const item = items[i];
      promises.push(this.fillItem(item));
   }
   const subject = new Subject<Item[]>();
   Promise.all(promises).then(res => {
                subject.next(items);
            },
            err => {
                subject.error(err);
            });
   return subject.asObservable();
}

getListWithFilledItems() {
   return this.getList()
              .map(items => this.fillAll(items))
}
.mergeMap(items => this.fillAll(items))