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);
这是递归的,直到你的极限。希望这对你有帮助