Observable.just(10000000).flatMap(new Func1<Integer, Observable<?>>() {
@Override
public Observable<?> call(Integer integer) {
System.out.println("flatMap1 <<<<<<map integer = " + integer);
Throwable error = new Throwable();
return Observable.just(integer);
}
}).flatMap(new Func1<Object, Observable<?>>() {
@Override
public Observable<?> call(Object o) {
System.out.println("flatMap2 <<<<<<map thread id = " + Thread.currentThread().getId());
Throwable error = new Throwable();
return Observable.error(error);
}
}).retryWhen(new Func1<Observable<? extends Throwable>, Observable<?>>() {
@Override
public Observable<?> call(Observable<? extends Throwable> errors) {
return errors.flatMap(new Func1<Throwable, Observable<?>>() {
@Override
public Observable<?> call(Throwable error) {
System.out.println("retryWhen <<<<<<map thread id = " + Thread.currentThread().getId());
// For IOExceptions, we retry
if (error instanceof IOException) {
return Observable.just(2);
}
// For anything else, don't retry
return Observable.just("dkfa;jdk;lsajfdks;");
}
});
}
}).subscribe(new Subscriber<Object>() {
@Override
public void onCompleted() {
System.out.println("onCompleted <<<<<<map thread id = " + Thread.currentThread().getId());
}
@Override
public void onError(Throwable e) {
System.out.println("onError <<<<<<map thread id = " + Thread.currentThread().getId());
}
@Override
public void onStart() {
System.out.println("onStart <<<<<<map thread id = " + Thread.currentThread().getId());
super.onStart();
// todo some common as show loadding and check netWork is NetworkAvailable
// if NetworkAvailable no ! must to call onCompleted
}
@Override
public void onNext(Object o) {
System.out.println("onNext <<<<<<map thread id = " + Thread.currentThread().getId());
}
});
输出:
onStart <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1
retryWhen <<<<<<map thread id = 1
flatMap1 <<<<<<map integer = 10000000
flatMap2 <<<<<<map thread id = 1