2017-07-04 15 views
7

Tôi đang cố thực hiện cuộc gọi API (sử dụng angular4), sẽ thử lại khi không thành công, sử dụng retryWhen. Tôi muốn nó trì hoãn 500 ms và thử lại. Điều này có thể đạt được với mã này:Cách tạo lại RXJs Thử lại khi có sự chậm trễ và giới hạn đối với các lần thử

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

Nhưng điều này sẽ tiếp tục cố gắng mãi mãi. Làm thế nào để hạn chế nó, giả sử 10 lần?

Cảm ơn bạn!

+0

Đây là một cách khác để thực hiện nó: https://stackoverflow.com/question/39928183/angular-2-rxjs-observable-retrywhen-filter-retry-on-error-status/41720854 # 41720854 –

Trả lời

15

Bạn cần phải áp dụng các giới hạn tín hiệu thử lại, ví dụ nếu bạn chỉ muốn 10 lần thử lại:

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

Cảm ơn bạn, đang làm việc! –

+1

Làm cách nào để bạn đưa ra lỗi cuối cùng là lỗi cuối cùng được ném? – felixfbecker

Các vấn đề liên quan