如何完成可观察物的可观察物

时间:2018-11-29 13:25:29

标签: angular rxjs ngrx

hi有一个(NgRx)动作,触发一个具有循环的函数(应该返回一个可观察的对象),对于循环的每一轮,我都需要发出(下一个)值,该循环中的函数将获取数据返回一个Observable,我想在所有Observable完成时完成具有循环的Observable:

代码如下:

      public outerFunction(
        collections: someObject
      ): Observable<someOtherObject> {

        const outerObservable$ = new Observable<Observable<someOtherObject>>(
          (observer) => {

            const collKeys = Object.keys(collections);
            for (const id of collKeys) {
              if (collections[id]) {
                const innerObs$ = this.functionThatReturnsObs(
                  collections[id]
                )
                observer.next(innerObs$);
              }
              // observer.complete(); <-- If I complete here the stream is interrupted
            }
          }
        );
return outerObservable$.pipe(mergeAll());
    }

2 个答案:

答案 0 :(得分:0)

您可以尝试

return outerObservable$.pipe(mergeMap(res=>merge(res))

如果这不起作用,您可以像处理普通数组一样处理

   public outerFunction(
        collections: someObject
      ): Observable<someOtherObject> {
            const innerObs$=[]
            const collKeys = Object.keys(collections);
            for (const id of collKeys) 
              if (collections[id]) 
                innerObs$.push(this.functionThatReturnsObs(
                  collections[id]
                ))

             return merge(innerObs$);
    }

答案 1 :(得分:0)

实际上,我从RxJs Docs

找到了答案

代码完全没问题就可以了,因为最后我叫{{1}}

  

mergeAll订阅一个发出Observable的Observable,   被称为高阶Observable。每次观察到其中之一   发出内部的Observable,它订阅并交付所有   来自内部Observable的值在输出Observable上。 输出   可观察值只有在所有内部可观察值都完成后才能完成。

最后,mergeAll()将完成我的可观察性