【发布时间】:2018-05-08 17:54:12
【问题描述】:
对具有超时的轮询器建模的最佳方法是什么,其中某种条件会导致提前退出为“反应性流”?
例如
如果我有一个 observable 每秒产生一个递减的正整数序列
9,8,7,6,5,4,3,2,1,0
编写消费者的最佳方法是在 5 秒后获取最新的单个事件,或者如果它在超时之前产生,则获取“0”事件。
这是我目前的代码:(Java 中的示例)
int intialValue = 10;
AtomicInteger counter = new AtomicInteger(intialValue);
Integer val = Observable.interval(1, TimeUnit.SECONDS)
.map(tick -> counter.decrementAndGet())
.takeUntil(it -> it == 0)
.takeUntil(Observable.timer(5, TimeUnit.SECONDS))
.lastElement()
.blockingGet();
System.out.println(val);
如果 initialValue = 10,我希望打印 6。如果 initialValue = 2,我希望在 5 秒超时到期之前打印 0。
如果有更好的方法可以做到这一点,我很感兴趣。
【问题讨论】:
-
observable 链中包含三个元素:源(
interval().map())、值选择(it == 0)、时间选择(timer())。没有比这更紧凑的了。
标签: rxjs rx-java reactive-programming system.reactive rx-java2