Rx java 为什么没有‘;t子订户';在RxJava中使用retryWhen()时调用的onComplete()方法
根据该文件: 返回与源发出相同值的可观察对象 除了一个错误外是可以观察到的。错误通知 从源头排放将导致可丢弃物品排放到 作为notificationHandler的参数提供的Observable 功能。如果该可观察调用onComplete或onError,则重试 将调用子订阅上的onCompleted或onError。否则,, 此可观察对象将重新订阅源可观察对象 当count1值达到3时,将调用subscriber.onCompleted();在我的选项中,子订阅服务器的onComplete()方法将在调用subscriber.onCompleted()后被调用,并且“child_onCompleted”将显示在输出中,但它不是;为什么会这样Rx java 为什么没有‘;t子订户';在RxJava中使用retryWhen()时调用的onComplete()方法,rx-java,Rx Java,根据该文件: 返回与源发出相同值的可观察对象 除了一个错误外是可以观察到的。错误通知 从源头排放将导致可丢弃物品排放到 作为notificationHandler的参数提供的Observable 功能。如果该可观察调用onComplete或onError,则重试 将调用子订阅上的onCompleted或onError。否则,, 此可观察对象将重新订阅源可观察对象 当count1值达到3时,将调用subscriber.onCompleted();在我的选项中,子订阅服务器的onComplete()
count1 = 0;
Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
System.out.println("call_onErr ");
subscriber.onError(new Throwable("gg!"));
}
}).retryWhen(new Func1<Observable<? extends Throwable>, Observable<?>>() {
@Override
public Observable<?> call(Observable<? extends Throwable> observable) {
System.out.println("fun_call+" + observable);
return observable.flatMap(new Func1<Throwable, Observable<?>>() {
@Override
public Observable<?> call(Throwable throwable) {
if (count1 < 3) {
count1 = count1 + 1;
return Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
System.out.println("fun_call_onNext " + " count=" + count1);
subscriber.onNext(1000);
}
});
} else
return Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
System.out.println("fun_call_onCompleted " + " " + count1);
subscriber.onCompleted();//this is the subscriber!!!!!!!
}
});
}
});
}
}).subscribe(new Subscriber<Integer>() {
@Override
public void onCompleted() {
System.out.println("child_onCompleted ");
}
@Override
public void onError(Throwable e) {
System.out.println("child_err ");
}
@Override
public void onNext(Integer integer) {
System.out.println("child_onNext " + integer + " ");
}
});
问题是,如果发送一个空的可观察对象,平面图将无法完成。相反,您可以在其内部使用特殊值,并与
takeWhile
操作符通信以触发完成:
Observable.error(new Throwable("gg!"))
.retryWhen(o -> {
AtomicInteger counter = new AtomicInteger();
return o.flatMap(e -> {
if (counter.getAndIncrement() < 3) {
return Observable.just(0);
}
return Observable.just(1);
})
.takeWhile(v -> v == 0);
})
.subscribe(...);
Observable.error(新的可丢弃(“gg!”)
.retryWhen(o->{
AtomicInteger计数器=新的AtomicInteger();
返回o.flatMap(e->{
if(counter.getAndIncrement()<3){
可观察的返回值。仅为(0);
}
可观察到的回报。仅(1);
})
.takeWhile(v->v==0);
})
.认购(……);
谢谢您的回答。
Observable.error(new Throwable("gg!"))
.retryWhen(o -> {
AtomicInteger counter = new AtomicInteger();
return o.flatMap(e -> {
if (counter.getAndIncrement() < 3) {
return Observable.just(0);
}
return Observable.just(1);
})
.takeWhile(v -> v == 0);
})
.subscribe(...);