重试后未调用 doOnCompleted

doOnCompleted not called after retryWhen

我有这样的东西:

            service.getStuff()
            .map(...)
            .observeOn(AndroidSchedulers.mainThread())
            .retryWhen(errors -> errors.flatMap(t -> {
                return otherObservable.doOnNext(someSideEffect);
            }))
            .doOnCompleted(() ->  onComplete())
            .subscribe(onNext() , onError());

onNext() 执行,并在 onComplete() 上调用来自 service.getStuff()

的原始可观察对象

问题:doOnCompleted()没有执行。

原始可观察值(service.getStuff)是:

Observable.create(new Observable.OnSubscribe<InputStream>() {
                                     @Override
                                     public void call(final Subscriber<? super InputStream> subscriber) {
                                         call.enqueue(new Callback() {
                                             @Override
                                             public void onFailure(Call call, IOException e) {
                                                 subscriber.onError(e);
                                             }

                                             @Override
                                             public void onResponse(Call call, Response response) throws IOException {
                                                 subscriber.onNext(response.body().byteStream());
                                                 Log.d("HTTP", "calling complete");
                                                 subscriber.onCompleted();
                                                 Log.d("HTTP", "called complete");
                                             }
                                         });
                                     }
                                 }

我不完全理解发生了什么,但是在找到 this similar discussion 之后我在没有 flatMap 的情况下重新实现了它并且它有效:

.retryWhen(errors -> errors.zipWith(otherObservable, dummyZipFunction));