RxJava2:retryWhen()的问题

RxJava2:retryWhen()的问题,java,android,rx-java2,Java,Android,Rx Java2,我正试图使用此方法为我的可完成的链实现retryWhen操作,但我不断收到错误。我正在尝试检查错误是否为HttpException,如果是,请刷新令牌并重试。链看起来像这样: Completable c = ...; c = c.retryWhen(errors -> errors.flatMap(error -> { if (error instanceof HttpExcetion) { return authHandler.refreshToken()

我正试图使用此方法为我的
可完成的
链实现
retryWhen
操作,但我不断收到错误。我正在尝试检查错误是否为
HttpException
,如果是,请刷新令牌并重试。链看起来像这样:

Completable c = ...;

c = c.retryWhen(errors -> errors.flatMap(error -> {
    if (error instanceof HttpExcetion) {
        return authHandler.refreshToken().flatMap(token -> Completable.complete());
    }
    return Completable.error(error);
}));
然而,这不会编译,我只是不知道我在这里做错了什么。因为我使用的是rxjava2,所以我不应该像文章中那样发出
null
,但这似乎并不能解决问题。我甚至尝试了一个更简单的版本,基本上是直接从那篇文章中复制出来的,并将
可观察的
替换为
可完成的

c.retryWhen(errors -> errors.flatMap(error -> {
        return Completable.timer(5, TimeUnit.SECONDS);
    }));
这也不会编译。错误是:

Error:(31, 51) error: incompatible types: cannot infer type-variable(s) R
(argument mismatch; bad return type in lambda expression
Completable cannot be converted to Publisher<? extends R>)
where R,T are type-variables:
R extends Object declared in method <R>flatMap(Function<? super T,? extends Publisher<? extends R>>)
T extends Object declared in class Flowable
错误:(31,51)错误:不兼容的类型:无法推断类型变量R
(参数不匹配;lambda表达式中的返回类型错误)

Completable无法转换为PublisherFirst,
Observable
Completable
位于完全不同的类型层次结构上,不能1:1互换;因此您需要
toFlowable()
转换为接收类型。其次,
Completable
s不发出值,因此您不能直接使用它来发出重试信号(如
Completable.timer()
示例)在flatMap场景中也不能使用它们来表示完成。更一般地说,空源flatMapping与错误源flatMapping不同,空源flatMapping不会终止结束流。首先,
Observable
Completable
位于完全不同的层次结构上,并且不是1:1可互换的;因此需要
toFlowable()
转换为接收类型。其次,
Completable
s不发出值,因此您不能直接使用它来发出重试信号(如
Completable.timer()
示例)在flatMap场景中,也不能使用它们来表示完成。更一般地说,空源的flatMapping与错误源的flatMapping不同,不会终止结束流。