2017-05-15 13 views
-1

ユーザオブジェクトを構築するために必要なサービスコールがいくつかあります。データのオプションであるため、呼び出しの1つが常にデータを返すとは限りません。角度rxjs Observable.forkJoin 404

私は以下のコードを持っていますが、オプションのAPI呼び出しで404が発生した場合、コードは.map関数に変換されません。私はオプションのURL API呼び出しでcatchに当たっていますが、.mapは決して呼び出されません。 404応答を返す可能性のあるAPIでforkJoinを使用できますか?

return Observable.forkJoin([ 
     this.wmrk_http.get('required-url') 
      .map((res:Response) => <user> res.json()) 
      .catch((res:Response) => Observable.empty<user>()), 
     this.wmrk_http.get('required-url-2') 
      .map((res:Response) => <groups> res.json()) 
      .catch((res:Response) => Observable.empty<groups>()), 
     this.wmrk_http.get('optional-data-url') 
      .map((res:Response) => <userData> res.json()) 
      .catch((res:Response) => Observable.empty<userData>()),  
    ]) 
    .map((data: any[]) => { 
     ... 
    }); 
+0

あるthe working plunker

Observable.forkJoin([ this.http.get('https://api.github.com/users/karser') .map((res:Response) => res.json()) .catch((res:Response) => Observable.of(null)), this.http.get('https://api.github.com/fsdfsdf') .map((res:Response) => res.json()) .catch((res:Response) => Observable.of(null)), this.http.get('https://api.github.com/2') .map((res:Response) => res.json()) .catch((res:Response) => Observable.of(null)) ]) .map((data: any[]) => { console.log(data) }) .subscribe(); 

を参照してください。 – jonrsharpe

答えて

0

forkJoinstops the chain項目のいずれかの値を発しない場合。したがって、defaultIfEmptyを使用するか、observable.emptyobservable.of(null)に置き換えてください。 [MCVE]と* "動作しない" *に拡大してください出力が

GET https://api.github.com/users/karser 200 (OK) 
GET https://api.github.com/fsdfsdf 404 (Not Found) 
GET https://api.github.com/2 404 (Not Found) 

[Object, null, null]