Можно ли генерировать элементы внутри Flowable.generate () лениво? - PullRequest
0 голосов
/ 17 октября 2018

У меня есть база данных, которую можно обновить, пока цепочка RxJava находится в середине своей работы.

Цепочка RxJava выглядит следующим образом:

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

База данныхможет обновляться, пока цепочка RxJava находится в середине обработки эмиссии.Поэтому Flowable.generate() должен запрашивать один элемент за один раз и ждать, пока потребитель onNext () не будет завершен, и только после этого запроса следующий элемент.

Можно ли лениво запрашивать элементы внутри Flowable.generate () только после onNextназывается?

1 Ответ

0 голосов
/ 17 октября 2018

Нет.generate будет генерировать элементы на основе нижестоящего спроса.Если вы можете контролировать спрос, вы можете контролировать, когда и сколько элементов генерируется.Однако, в большинстве случаев, особенно с этими concatMap с, у вас не будет такого точного контроля.Альтернативой является создание цикла обратной связи через субъект / процессор и сопоставление его элемента с асинхронным запросом к базе данных:

FlowableProcessor<Integer> processor = PublishProcessor.<Integer>create().toSerialized();

processor
.concatMap(_ -> 
   getNextSingleItemAsync().subscribeOn(Schedulers.single())
)
.concatMap(/*Mapping*/)
.concatMap(/*Mapping*/)
.subscribe(item -> {
    /* Process item. */

    // get to the next item
    processor.onNext(1);
});

processor.onNext(0); // start the loop
...