2017-07-04 33 views
7

Próbuję wykonać wywołanie API (używając angular4), które ponawia próbę, gdy się nie powiedzie, używając metody retryWhen. Chcę, aby opóźnić o 500 ms i ponowić próbę ponownie. Można to osiągnąć za pomocą tego kodu:Jak utworzyć próbę RXJ? Z opóźnieniem i limitem prób

loadSomething(): Observable<SomeInterface> { 
    return this.http.get(this.someEndpoint, commonHttpHeaders()) 
    .retryWhen(errors => errors.delay(500)); 
} 

Ale to będzie próbować na zawsze. Jak ograniczyć to do, powiedzmy 10 razy?

Dziękujemy!

+0

Oto kolejny sposób na jego realizację: https://stackoverflow.com/questions/39928183/angle-2-rxjs-obserwowalny-retrywhen-filter-ponów-na-błędzie-status/41720854 # 41720854 –

Odpowiedz

15

Trzeba zastosować limit do ponawiania sygnału, na przykład, jeśli tylko chciał 10 ponownych prób:

loadSomething(): Observable<SomeInterface> { 
    return this.http.get(this.someEndpoint, commonHttpHeaders()) 
    .retryWhen(errors => 
     // Time shift the retry 
     errors.delay(500) 
      // Only take 10 items 
      .take(10) 
      // Throw an exception to signal that the error needs to be propagated 
      .concat(Rx.Observable.throw(new Error('Retry limit exceeded!')) 
    ); 
} 
+1

Dziękuję, pracuję! –

+1

W jaki sposób błąd końcowy byłby ostatnim błędem? – felixfbecker