Forkjoin带有空的(或没有)可观测数组
问题描述:
我试图检测所有的可观察物何时完成。我有以下Observable:Forkjoin带有空的(或没有)可观测数组
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);
}
);
我需要做一些事情,只要我所有的功能都完成了。 Forkjoin似乎在observables
数组不为空时工作。但是当数组为空时,它永远不会被调用。我该如何解决这个问题?
答
您错过了订阅中的第3个回调。试试这个:
Rx.Observable.forkJoin([]).subscribe(
val => {
console.log('next');
},
err => {
console.log('err');
},
() => {
console.log('complete')
}
);
forkJoin在空数组上立即完成。
答
你错过了complete
回调。您可以传递第三个参数或传递一个observer
对象而不是3个参数,以使事件检查更具可读性。
yourObservable.subscribe({
next: value => console.log(value),
error: error => console.log(error),
complete:() => console.log('complete'),
});