Angular 如何完成一个可观察到的
hi有一个(NgRx)动作,该动作触发一个函数(该函数应返回一个可观测值),该函数有一个循环,对于循环的每一轮,我需要发出(下一轮)一个值,循环中获取数据的函数返回一个可观测值,我想在所有可观测值完成时完成具有循环的可观测值: 代码如下:Angular 如何完成一个可观察到的,angular,rxjs,ngrx,Angular,Rxjs,Ngrx,hi有一个(NgRx)动作,该动作触发一个函数(该函数应返回一个可观测值),该函数有一个循环,对于循环的每一轮,我需要发出(下一轮)一个值,循环中获取数据的函数返回一个可观测值,我想在所有可观测值完成时完成具有循环的可观测值: 代码如下: public outerFunction( collections: someObject ): Observable<someOtherObject> { const outerObser
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()将完成我的observableHi,好的,但是,我应该在哪里完成?在for..循环之后