我尝试使用此blog post as a basis为retryWhen
链实施Completable
操作,但我不断收到错误。我试图检查错误是否为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);
}));
然而,这不会编译,我只是无法弄清楚我在这里做错了什么。由于我使用RxJava 2,我不应该像在文章中那样发出null
,但这似乎无论如何都无法解决问题。我甚至尝试了一个更简单的版本,基本上直接从该文章中复制并将Observable
替换为Completable
:
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
知道这里发生了什么吗?