Rx java RxJava中异步操作上的串行循环
我必须调用这个方法Rx java RxJava中异步操作上的串行循环,rx-java,Rx Java,我必须调用这个方法 Observable<Boolean> doOperation(int i); 然而,我真的希望做这样的事情: Observable.range(1, 10) .flatMap(i -> doOperation(i)) 然而,在后一种结构中,量程操作员以全功率运行,并立即发送所有10个操作。操作的性质要求我等到操作(1)完成后再触发操作(2),以此类推 我想知道除了上面的第一个例子之外,在Rx中是否还有其他方法可以实现这一点?明白了!可以使用co
Observable<Boolean> doOperation(int i);
然而,我真的希望做这样的事情:
Observable.range(1, 10)
.flatMap(i -> doOperation(i))
然而,在后一种结构中,量程操作员以全功率运行,并立即发送所有10个操作。操作的性质要求我等到操作(1)完成后再触发操作(2),以此类推
我想知道除了上面的第一个例子之外,在Rx中是否还有其他方法可以实现这一点?明白了!可以使用concatMap()代替flatMap()。ConcatMap将等到Observable n完成后再订阅Observable n+1 通过创建一个方法可以看到这一点
private static Observable<Integer> doOperation(int i)
{
logger.info("Calling method with [{}]", i);
return Observable.just(i).delay(1, TimeUnit.SECONDS).subscribeOn(Schedulers.io());
}
明白了!可以使用concatMap()代替flatMap()。ConcatMap将等到Observable n完成后再订阅Observable n+1 通过创建一个方法可以看到这一点
private static Observable<Integer> doOperation(int i)
{
logger.info("Calling method with [{}]", i);
return Observable.just(i).delay(1, TimeUnit.SECONDS).subscribeOn(Schedulers.io());
}
使用
PublishSubject
可以轻松实现这一点。在doSomeOperation(integer)
方法中,您必须调用limit.onNext(您的下一个整数)
在当前调用完成后进行下一次调用。如您所见,doSomeOperation(integer)
仅在当前操作完成时调用下一个操作,因此操作之间不会交错
PublishSubject<Integer> limit = PublishSubject.create();
limit.concatMap(doSomeOperation(integer))
.subscribe();
limit.onNext(1);
PublishSubject limit=PublishSubject.create();
limit.concatMap(doSomeOperation(整数))
.subscribe();
限制.onNext(1);
这是递归的,直到你的极限。希望这对您有所帮助这可以通过使用
PublishSubject
轻松实现。在doSomeOperation(integer)
方法中,您必须调用limit.onNext(您的下一个整数)
在当前调用完成后进行下一次调用。如您所见,doSomeOperation(integer)
仅在当前操作完成时调用下一个操作,因此操作之间不会交错
PublishSubject<Integer> limit = PublishSubject.create();
limit.concatMap(doSomeOperation(integer))
.subscribe();
limit.onNext(1);
PublishSubject limit=PublishSubject.create();
limit.concatMap(doSomeOperation(整数))
.subscribe();
限制.onNext(1);
这是递归的,直到你的极限。希望这对你有帮助