2017-01-30 6 views
3

Я хочу испустить случайное значение через 10 секунд после вызова onNext. Таким образом, onNext будет вызван на 12345 и через 10 секунд позжеNext должен быть вызван для случайного числа. Каков наилучший способ достичь этого с помощью RxJava? Заранее спасибо.Вывести значение после того, как onNext вызывается после определенного времени

Observable.create(subscriber -> { 
    subscriber.onNext(12345); 
}).subscribeOn(...) 
.observeOn(...) 
.subscribe(new Subscriber<Long>(){ 
    @Override 
    public void onNext(Long aLong) { 
     //Do Something 
    } 
}) 
+0

Вы можете поместить эту логику в метод подписчика -> {}. Таймер или что-то может сделать это. Это вариант jus tmy, но я не думаю, что RxJava предназначен для обработки сложных случаев из коробки. Это хорошая идея написать свою логику, как испускать ваши данные в чистой Java, когда это сложный случай. –

+0

Разве нет оператора или что-то в этом роде? – Simar

+0

В этом случае швы будут очень конкретными, но, возможно, у кого-то есть хорошая идея в SO –

ответ

1

Если вы сразу же испускаете значение «12345», тогда решение тривиально. Просто соедините это наблюдаемое с timer, и вы получите такое поведение. Тем не менее, я собираюсь предположить, что ваша логика в методе OnSubscribe, которую вы передаете в create, выполняет некоторую работу и будет выдавать значение после его готовности (т. Е. Запрос сети). В этом случае вам необходимо использовать как операторы flatMap, так и merge. Что-то вроде этого должно быть достаточно.

Observable.create(subscriber -> { 
    subscriber.onNext(12345); 
}) 
    .flatMap(value -> Observable.just(value) 
     .mergeWith(Observable.timer(10, TimeUnits.SECONDS).map(/* define your "random" value here */)) 
) 
    .subscribeOn(...) 
    .observeOn(...) 
    .subscribe(new Subscriber<Long>(){ 
     @Override 
     public void onNext(Long aLong) { 
     //Do Something 
     } 
    }) 

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

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

+0

Спасибо. Это идеальное решение. – Simar

Смежные вопросы