2017-07-06 12 views
0

すべての観測値が完了した時点を検出しようとしています。私は以下のObservablesを持っています: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 on empty arraysすぐに完了します。

2

completeコールバックがありません。 3つ目の引数を渡したり、3つの引数の代わりにobserverオブジェクトを渡して、イベントチェックをより読みやすくすることができます。

yourObservable.subscribe({ 
    next: value => console.log(value), 
    error: error => console.log(error), 
    complete:() => console.log('complete'), 
}); 
関連する問題