Angular 如何完成一个可观察到的

Angular 如何完成一个可观察到的,angular,rxjs,ngrx,Angular,Rxjs,Ngrx,hi有一个(NgRx)动作,该动作触发一个函数(该函数应返回一个可观测值),该函数有一个循环,对于循环的每一轮,我需要发出(下一轮)一个值,循环中获取数据的函数返回一个可观测值,我想在所有可观测值完成时完成具有循环的可观测值: 代码如下: public outerFunction( collections: someObject ): Observable<someOtherObject> { const outerObser

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

代码如下:

      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());
    }
public outerFunction(
集合:someObject
):可见{
const outerObservable$=新的可观测值(
(观察员)=>{
const collKeys=Object.keys(集合);
for(密钥的常量id){
if(集合[id]){
const innerObs$=返回sobs的这个.function(
收藏[id]
)
observer.next(innerObs$);
}
//observer.complete();你能试试这个吗

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$);
    }
public outerFunction(
集合:someObject
):可见{
const innerObs$=[]
const collKeys=Object.keys(集合);
for(密钥的常量id)
if(集合[id])
innerObs$.push(此.function返回sobs(
收藏[id]
))
返回合并(innerObs$);
}

事实上,我从

由于最后我调用了
mergeAll()

mergeAll订阅一个发出可见光的可见光 被称为高阶可观测的。每次它观测到其中一个 发射出的内部可观测物,它订阅并传递所有 输出可观测值上的内部可观测值。输出 “可观察”仅在所有内部可观察完成后完成。


最后mergeAll()将完成我的observable

Hi,好的,但是,我应该在哪里完成?在for..循环之后