retryWhen() 不调用 Observable.just() 内部的内容



我有一个测试,我在该测试中检查了对令牌授权的重试机制。在该测试中,我在开始时将null返回为null,然后返回有效的令牌,这样:

whenever(accountManager.getToken())
            .thenReturn(null)
            .thenReturn("some_token") 

然后我有一个可观察的:

    return Observable.just(accountManager.getToken())
            ...
            .retryWhen { retryOnAuthExceptionWithBackoff(it) }

它应该得到令牌,将其发送到某个地方,等待响应,然后响应是错误的,再次重试直到成功。

问题是,当retryWhen()启动时,请观察到源可观察到的源,只是立即返回其初始值。

另一方面,此工作:

    return Observable.just(null)
            .map{ accountManager.getToken() }
            ...
            .retryWhen { retryOnAuthExceptionWithBackoff(it) }

是设计还是错误?如果是设计,那将是一种优雅的写作方式,因为Observable.just(null)看起来很丑。

just()进行恒定值参考,并不断向订户分发相同的参考。

您需要的是fromCallable

Observable.fromCallable(() -> accountManager.getToken())
...

每当新的订户(例如重试)进来时,lambda再次执行。

相关内容

  • 没有找到相关文章

最新更新