如何在 RxJava 可迭代可观察量中重复一个但继续使用其他



假设我有一个从可迭代对象或数组创建的可观察量。如果我将该可观察量映射到返回某些内容的方法,那么如果我得到一个我不喜欢的值,同时继续处理我收到我喜欢的值的可迭代/数组中的项目,我该如何重试该行为?

这是seudo代码来描绘我在说什么:

Observable
.fromIteratable(values)
.map(value -> getSomeDataFromAnAPI(value))
.retryIf(value -> value != somethingIWant)
.delay(10, TimeUnit.SECONDS);

我正在寻找如何完成"retryIf"行为。

在调用周围放置一个循环并返回所需的值:

Observable
.fromIteratable(values)
.map(value -> {
while (true) {
Data d = getSomeDataFromAnAPI(value));
if (d == somethingIWant) {
return d;
}
}
}
.delay(10, TimeUnit.SECONDS);

如果您不喜欢发出的值,可以通过将其映射到错误,然后使用retryWhen()运算符重试来拒绝它(强制!(。

Observable
.fromIterable( values )
.flatMap( value -> getSomeDataFromAnAPI( value )
.doOnNext( value -> {
if ( value != somethingIWant ) {
throw new IllegalStateException("undesired");
}
})
.retryWhen( throwable -> throwable.delay( 10,  TimeUnit.SECONDS) );

这将重试返回错误值的项目,直到它返回一个好的值。

请注意,flatMap()将在默认调度程序上尝试每个请求,从而导致许多并行请求。您可以添加参数来限制并行度。

相关内容

  • 没有找到相关文章

最新更新