0
この操作が成功するまで(つまり、true
を返すまで)、コードで特定の非同期操作を繰り返す必要があります。RxJavaでループする条件がtrueになる
私は次の回避策を使用しています現時点では:「コードは、私が欲しいものを行いますが、それはdoesnの
Try
Try
...
Try
Connected.
:
Supplier<Observable<Boolean>> myOperation =() -> {
// do something useful and return 'true' if it was successful
// NOTE: GENERATING A RANDOM NUMBER IS JUST AN EXAMPLE HERE
// I WANT TO RUN AN ASYNCHRONOUS OPERATION (LIKE PINGING A SERVER
// OR THE LIKE) AND RETRY IT UNTIL IT SUCCEEDS.
System.out.println("Try");
return Observable.just(Math.random() > 0.9);
};
final Throwable retry = new IllegalStateException();
Observable.<Boolean>create(subscriber -> {
myOperation.get().subscribe(subscriber);
}).flatMap(b -> b ? Observable.just(b) : Observable.error(retry))
.retryWhen(exceptions -> exceptions.flatMap(exception -> {
if (exception == retry) {
return Observable.timer(1, TimeUnit.SECONDS);
}
return Observable.error(exception);
}))
.toBlocking()
.forEach(b -> {
System.out.println("Connected.");
});
それがうまく機能し、このようなものをプリントアウト非常にエレガントな外観。私は良い方法がなければならないと確信しています。おそらくカスタムを使用してOperator
?
誰かがRxJavaで同じことをよりわかりやすく、人工的なものなしで達成する方法を知っていますか?Throwable
?
ありがとうございました。私はあなたの解決策を私の問題にマップするのに困っている。私は成功するまで非同期操作を再試行したい。ここでは、乱数を生成する例を示します。 –
私は別のアプローチでコメントを編集しました。 –