繁体   English   中英

SkipWhile 方法在 RxJava 中没有像我预期的那样工作

[英]SkipWhile method does not work as I expected in RxJava

boolean isRetryButtonClicked = false;

.retryWhen(throwableFlowable -> throwableFlowable.skipWhile(throwable -> !isRetryButtonClicked)
    .doOnNext(throwable -> Log.w("...", "doOnNext"))
    .doOnComplete(() -> Log.w("...", "doOnComplete"))
    .doOnError(throwable -> Log.w("...", "doOnError " + throwable))
    .doOnSubscribe(subscription -> Log.w("...", "doOnSubscribe")))

如果isRetryButtonClicked变量为 false,那么它不会打印 doOnNext,这没关系,因为我告诉它在isRetryButtonClicked等于 false 时跳过,但是当用户单击重试按钮时,我会将isRetryButtonClicked值更改为 true,然后它必须开始打印 doOnNext 但当前结果仍然没有打印任何东西。

retryWhen需要一个信号来从该内部源执行重试。 但是, isRetryButtonClicked是一个字段,因此对它的更改不是信号。 你需要的是一个Subject 例如:

PublishSubject<String> subjectToRetry = PublishSubject.create();

source.retryWhen(errors -> errors.zipWith(subjectToRetry, (e, s) -> s))
    .doOnNext(throwable -> Log.w("...", "doOnNext"))
    .doOnComplete(() -> Log.w("...", "doOnComplete"))
    .doOnError(throwable -> Log.w("...", "doOnError " + throwable))
    .doOnSubscribe(subscription -> Log.w("...", "doOnSubscribe")))

// inside the retryButton's click handler:

subjectToRetry.onNext("Doit!");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM