2017-07-06 48 views
0

我试图检测所有的可观察物何时完成。我有以下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数组不为空时工作。但是当数组为空时,它永远不会被调用。我该如何解决这个问题?

回答

5

您错过了订阅中的第3个回调。试试这个:

Rx.Observable.forkJoin([]).subscribe(
    val => { 
     console.log('next'); 
    }, 
    err => { 
     console.log('err'); 
    }, 
    () => { 
     console.log('complete') 
    } 
); 

forkJoin在空数组上立即完成。

2

你错过了complete回调。您可以传递第三个参数或传递一个observer对象而不是3个参数,以使事件检查更具可读性。

yourObservable.subscribe({ 
    next: value => console.log(value), 
    error: error => console.log(error), 
    complete:() => console.log('complete'), 
}); 
相关问题