2017-04-20 19 views
1

で2つのサービスを呼び出すと、2番目のサービスが失敗することがありますが、2番目のサービスが失敗した場合はstreamを続行します。私がこれまで持って何アングル2:rxjs forkJoin httpエラー継続ストリーム

Observable.forkJoin([ 
    this.http.get('/service1'), 
    this.http.get('/service2').catch(error => Observable.empty()) 
]) 
    .do(([result1, result2]: any[]) => { 
     //When service2 fails, I never get in here with .empty() 

    }) 

Observable.of(undefined)またはObservable.of(error)作品。しかし、私はcatchからempty Observableを返すと、呼び出しが黙って失敗し、ストリームが続行されるという印象を受けましたか?

service2が失敗した場合、ストリームが確実に継続するようにするにはどうすればよいですか?

答えて

3

Observable.empty()completeメソッドをobserverオブジェクトと呼び出すだけで、他のことはしません。 そして、これはどのようにforkJoin仕事です:完全なすべての観測は、それぞれの最後の値を発するとき

Observable.empty()は、任意の最後の値を持っていないので、forkJoinはどのようにemit the last valueを知ることができません。 Observable.of(undefined)この場合、undefinednextメソッドを呼び出すと、completeメソッドが呼び出されます。最後の値はundefinedです。

service2に障害が発生してもストリームが確実に続行されるようにする方法を教えてください。

エラーハンドラとテストハンドラを追加してテストすることができます。ここ

デモ:テストケースのためhttp://jsbin.com/babirakiyi/1/edit?js,console

感謝@Yury Tarabankoは:

https://github.com/ReactiveX/rxjs/blob/524259a9bf2154824ddced89efc71c2e4149b2a9/spec/observables/forkJoin-spec.ts#L165-L174

+1

+1でも任意のソースが空のhttpsの場合forkJoin'は発しない 'チェックするテストケースがあります:// githubの。 com/ReactiveX/rxjs/blob/master/spec/observables/forkJoin-spec.ts#L165 –

関連する問題