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());
}
答案 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()将完成我的可观察性