Advertisement
Guest User

RetryWithDelay with Throwable

a guest
Jun 12th, 2015
2,181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.33 KB | None | 0 0
  1. import java.util.concurrent.TimeUnit;
  2.  
  3. import rx.Observable;
  4. import rx.functions.Func1;
  5.  
  6. public class RetryWithDelay implements
  7.         Func1<Observable<? extends Throwable>, Observable<?>> {
  8.  
  9.     private final int maxRetries;
  10.     private final int retryDelayMillis;
  11.     private int retryCount;
  12.  
  13.     public RetryWithDelay(final int maxRetries, final int retryDelayMillis) {
  14.         this.maxRetries = maxRetries;
  15.         this.retryDelayMillis = retryDelayMillis;
  16.         this.retryCount = 0;
  17.     }
  18.  
  19.     @Override
  20.     public Observable<?> call(Observable<? extends Throwable> attempts) {
  21.         return attempts
  22.                 .flatMap(new Func1<Throwable, Observable<?>>() {
  23.                     @Override
  24.                     public Observable<?> call(Throwable throwable) {
  25.                         if (++retryCount < maxRetries) {
  26.                             // When this Observable calls onNext, the original
  27.                             // Observable will be retried (i.e. re-subscribed).
  28.                             return Observable.timer(retryDelayMillis,
  29.                                     TimeUnit.MILLISECONDS);
  30.                         }
  31.  
  32.                         // Max retries hit. Just pass the error along.
  33.                         return Observable.error(throwable);
  34.                     }
  35.                 });
  36.     }
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement