Я делаю асинхронных вызовов, после 10 секунд в течение 1 минуты, что означает примерно 6 звонки будут сделаны, но проблема в я хочу применить delay
на конкретных condition
Delay кроме Первый раз Rxjava Android
Observable
.just(listOfSomethings_Locally)
.take(1, TimeUnit.MINUTES)
.serialize()
.delaySubscription(// this is confusing part
() ->
Observable.just(listOfItems_Network).take(10,TimeUnit.SECONDS)
)
Я хочу, чтобы задержка сетевого вызова в течение 10 секунд, за исключением первого вызова, и отмена сетевого вызова через 10 секунд, поэтому я должен иметь точные 6 вызовов за 1 минуту.
EDIT
Из-за путаницы в сценарии здесь переопределяется сценарий:
, что у меня есть большой список драйверов на местном уровне, и я хочу, чтобы отправить запрос к каждому из них после каждого 10 секунд и прослушать другого абонента , чтобы проверить, не отменил ли его водитель в течение 10 секунд, этот процесс будет продолжаться около 1 минуты, если один из водителей отменит i немедленно отправьте запрос на следующий
Код, написанные до сих пор:
Observable.from(driversGot)
.take(1,TimeUnit.MINUTES)
.serialize()
.map(this::requestRydeObservable) // requesting for single driver from driversGot (it's a network call)
.flatMap(dif ->
Observable.amb(
kh.getFCM().driverCanceledRyde(), // listen for if driver cancel request returns integer
kh.getFCM().userRydeAccepted()) // listen for driver accept returns RydeAccepted object
.map(o -> {
if (o instanceof Integer) {
return new RydeAccepted();
} else if (o instanceof RydeAccepted) {
return (RydeAccepted) o;
}
return null;
}).delaySubscription(10,TimeUnit.SECONDS)
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(fua -> {
if (fua == null) {
UiHelpers.showToast(context, "Invalid Firebase response");
} else if (!fua.getStatus()) { // ryde is canceled because object is empty
UiHelpers.showToast(context, "User canceled ryde");
} else { // ryde is accepted
UiHelpers.showToast(context, "User accepted ryde");
}
}, t -> {
t.printStackTrace();
UiHelpers.showToast(context,"Error sending driver requests");
}, UiHelpers::stopLoading);
Просьба предоставить более подробную информацию о ваших наблюдаемых и вашем прецеденте. Насколько я понимаю ваше обновление: у вас есть список предметов, которые будут преобразованы в Observable. Вы хотите обработать один элемент за раз, который был нажат на вас. Значения должны быть запланированы на вас каждые 10 секунд. Пример: Sec 0: Значение 1, Sec 10: Значение 2. Каждое испускаемое значение будет обрабатываться через веб-вызов. Вы проверяете другой предмет, если предмет был отменен в течение 10 секунд. Если нет, то для одного элемента будет 60 секунд. Если отменено в течение 10 секунд, вы начинаете следующий в очереди? –
Вы точно понимаете поток, за исключением того, что 60 секунд - это общее предельное время для всех элементов в списке –
Итак, ваш список состоит из 6 элементов, или как бы вы хотели закончить через 60 секунд, если вы schnedule один элемент каждые 10 секунд? –