我试图检测我的所有观察结果何时完成。我有以下Observables:
let observables:any[] = [];
if(valid){
observables.push(new Observable((observer:any) => {
async(()=>{
observer.next();
observer.complete();
})
}))
}
if(confirmed){
observables.push(new Observable((observer:any) => {
async(()=>{
observer.next();
observer.complete();
})
}))
}
Observable.forkJoin(observables).subscribe(
data => {
console.log('all completed');
},
error => {
console.log(error);
}
);
每当我的所有功能都完成时,我都需要做点什么。当observables
数组不为空时,Forkjoin似乎有效。但是当数组为空时,它永远不会被调用。我该如何解决这个问题?
答案 0 :(得分:7)
您缺少订阅中的第三个回调。试试这个:
Rx.Observable.forkJoin([]).subscribe(
val => {
console.log('next');
},
err => {
console.log('err');
},
() => {
console.log('complete')
}
);
空数组上的forkJoin立即完成。
答案 1 :(得分:2)
您缺少complete
回调。您可以传递第三个参数或传递observer
对象而不是3个参数,以使事件检查更具可读性。
yourObservable.subscribe({
next: value => console.log(value),
error: error => console.log(error),
complete: () => console.log('complete'),
});
答案 2 :(得分:2)
尝试一下:
import { forkJoin, Observable, of } from 'rxjs';
export function forkJoinSafe<T = any>(array: Observable<T>[]): Observable<T[]> {
if (!array.length) {
return of([])
}
return forkJoin<T>(array);
}