我想从一个 observable 中获取结果 10 次,不管是错误还是成功。这是我正在尝试的
mPortalNetworkService.getApi()
.login(mUsername, mPassword, mEmail)
.repeat(10)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
println("Finally here -> SUB")
println(it)
}, {
println("Finally here -> Error")
it.printStackTrace()
})
我正在调用 rest api 进行日志记录(使用 Retrofit)。我面临的问题是它只返回一次结果。我想要运行此可观察对象的所有 10
次结果。我该怎么做?
最佳答案
不幸的是,没有运算符可以为您组合repeat
和retry
行为。您可以设置 Hans 建议的基于 range
的解决方案,也可以在 repeat
和 retry
之间共享一个计数器来限制两者:
static <T> ObservableTransformer<T, T> redo(int maxCount) {
return o -> {
Observable.defer(() -> {
AtomicInteger count = new AtomicInteger(maxCount);
return o.repeat(() -> count.incrementAndGet() < maxCount)
.retry(err -> count.incrementAndGet() < maxCount);
});
};
}
mPortalNetworkService.getApi()
.login(mUsername, mPassword, mEmail)
.subscribeOn(Schedulers.io())
.compose(redo(10))
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
println("Finally here -> SUB")
println(it)
}, {
println("Finally here -> Error")
it.printStackTrace()
})
请注意,要确保 login
发生在后台线程上,您必须在重复/重试之前 subscribeOn
。
关于java - 如何重复 10 次观察并得到 10 次结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49221740/