Rx java 为什么没有‘;t子订户';在RxJava中使用retryWhen()时调用的onComplete()方法

Rx java 为什么没有‘;t子订户';在RxJava中使用retryWhen()时调用的onComplete()方法,rx-java,Rx Java,根据该文件: 返回与源发出相同值的可观察对象 除了一个错误外是可以观察到的。错误通知 从源头排放将导致可丢弃物品排放到 作为notificationHandler的参数提供的Observable 功能。如果该可观察调用onComplete或onError,则重试 将调用子订阅上的onCompleted或onError。否则,, 此可观察对象将重新订阅源可观察对象 当count1值达到3时,将调用subscriber.onCompleted();在我的选项中,子订阅服务器的onComplete()

根据该文件:

返回与源发出相同值的可观察对象 除了一个错误外是可以观察到的。错误通知 从源头排放将导致可丢弃物品排放到 作为notificationHandler的参数提供的Observable 功能。如果该可观察调用onComplete或onError,则重试 将调用子订阅上的onCompleted或onError。否则,, 此可观察对象将重新订阅源可观察对象

当count1值达到3时,将调用subscriber.onCompleted();在我的选项中,子订阅服务器的onComplete()方法将在调用subscriber.onCompleted()后被调用,并且“child_onCompleted”将显示在输出中,但它不是;为什么会这样

  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(...);