Повторяйте вызов модификации с помощью RxJava до тех пор, пока условие не станет действительным.

Проблема: обращение к конечной точке до тех пор, пока список возвращаемых элементов не станет пустым. Каждый последующий вызов будет иметь обновленный параметр запроса packageId, который представляет собой packageId последнего элемента.

Настройка: Retrofit2 с адаптером Rx

Попытка:

MyApiService api = retrofit.create(MyApiService.class);
Observable<Output> call = api.myCall(packetId);
call.repeat().takeUntil(output -> output != null && !output.isEmpty())
    .compose(applySchedulers())
    .subscribe(output -> {
        packetId = output.lastPacketId();
        onFetchOutput(output)
    });

Здесь packageId не будет обновляться, так как наблюдаемый объект будет иметь те же параметры, с которыми он был создан.

Я всегда могу снова вызвать этот метод после получения результата.

Вопрос. Существует ли реактивный способ сделать это? Я предполагаю, что в нем будет задействован какой-то оператор, который каким-то образом вернет результаты.


person Shubham Chaudhary    schedule 10.03.2016    source источник


Ответы (1)


Вы можете использовать PublishSubject

private static void test() {
    PublishSubject<Integer> packetSubject = PublishSubject.create();
    packetSubject
            .flatMap(integer -> call()
                    .doOnNext(output -> {
                        if (output == null) {
                            packetSubject.onCompleted();
                        }
                    }))
            .subscribe(output -> {
                if (output != null) {
                    packetSubject.onNext(output.lastPacketId);
                }});
    packetSubject.onNext(1);
}
person MyDogTom    schedule 10.03.2016