Rx java 是否可以在Flowable.generate()中惰性地生成项? 我有一个数据库,它可以在RXJAVA链的中间工作时更新。

Rx java 是否可以在Flowable.generate()中惰性地生成项? 我有一个数据库,它可以在RXJAVA链的中间工作时更新。,rx-java,rx-java2,Rx Java,Rx Java2,RxJava链如下所示: Flowable.generate(/*Query database for 1 item*/) .subscribeOn(Schedulers.single()) .concatMap(/*Mapping*/) .concatMap(/*Mapping*/) .subscribe(/*Consumers*/) 数据库可以在RXJava链的处理过程中进行更新。因此Flowable.generate应该一次

RxJava链如下所示:

Flowable.generate(/*Query database for 1 item*/)
        .subscribeOn(Schedulers.single())
        .concatMap(/*Mapping*/)
        .concatMap(/*Mapping*/)
        .subscribe(/*Consumers*/)

数据库可以在RXJava链的处理过程中进行更新。因此Flowable.generate应该一次请求一个项目,并等待onNext使用者完成,并且只在该查询完成后才请求下一个项目

是否可以仅在调用onNext后才在Flowable.generate中延迟查询项目

No.generate将根据下游需求生成项目。如果可以控制需求,则可以控制生成项目的时间和数量。然而,大多数情况下,尤其是使用concatMaps,您将无法进行如此精细的控制。另一种方法是通过主题/处理器创建反馈循环,并将其项映射到数据库的异步查询:

FlowableProcessor=PublishProcessor.create.toSerialized; 加工机 .concatMap \-uu> getNextSingleItemAsync.subscribeOnSchedulers.single .concatMap/*映射*/ .concatMap/*映射*/ .订阅项->{ /*处理项目*/ //进入下一个项目 processor.onNext1; }; processor.onNext0;//开始循环
非常感谢。但是,如果处理器和onNext消费者不可能在同一个地方呢?例如,如果链封装在返回Flowable的某个方法中。在这种情况下,我们将无法访问processor,并将在持有processor的类之外订阅。您必须编写一个运算符,以一种您可以从最终使用者内部调用的方式公开请求调用。此外,该操作员还必须抑制来自其直接下游的请求,以避免干扰。