2016-08-10 5 views
1

http://。customers.jsonを呼び出すAngular 2コードを取得してから返されたURLを使用して、 。 rxjs retryメソッドを使用して2番目の呼び出しが失敗した場合、両方の呼び出しを再試行する方法を教えてください。現在、それはちょうど2番目を再試行するようです。別のものに依存している場合にAngular 2で失敗した場合はすべてのHTTPコールを再試行

だから、
this.http.get('./customer.json') 
.map((res: Response) => { 
    this.customer = res.json(); 
    return this.customer; 
}) 
.flatMap((customer) => { 
    return this.http.get(customer.contractUrl)).map((res: Response) => res.json() 
}) 
.retry(1); 

this.http.get(customer.contractUrl))は、私はそれが再びhttp.get('./customer.json')this.http.get(customer.contractUrl))の両方を再試行作るのですかどのように失敗した場合。

+0

をそれを把握することができるかどうかわかりますか?または、あなたの問題を再現するためにjsbinを提供できますか? – paulpdaniels

+1

'map'の中に値を代入するのは良い方法ではありません。代入を行うには 'do'演算子を使用してください。 – smnbbrv

+0

' this.http.get( './ customer.json')。retry(1).map ... '? – smnbbrv

答えて

1

元のコードがうまくいかない理由はわかりませんが、代わりにcatchメソッドを試してみたところ、うまくいくようです。

makeCall(isRetry = false){ 
    return this.http.get('./customer.json') 
     .map((res: Response) => { 
      this.customer = res.json(); 
      return this.customer; 
     }) 
     .flatMap((customer) => { 
      return this.http.get(customer.contractUrl)).map((res: Response) => res.json() 
     }) 
     .catch((err) => { 
      if (isRetry === false){ 
       return this.makeCall(true); 
      } 

      return Observable.throw(err); 
     }); 
} 

は、私はあなたが何のキャッシングが、ここで遊んではありません確信している...いくつかjsbinsを作り、私は仕事する必要があることを

関連する問題