2017-07-06 49 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'), 
}); 
相關問題