辅助操作
Utility
delay: 延迟发射或者监听
顾名思义,
delay()
简单的
Observable.interval(100, TimeUnit.MILLISECONDS).take(5)
.delay(1, TimeUnit.SECONDS)
.timeInterval()
.subscribe(System.out::println);
输出:
TimeInterval [intervalInMilliseconds=1109, value=0]
TimeInterval [intervalInMilliseconds=94, value=1]
TimeInterval [intervalInMilliseconds=100, value=2]
TimeInterval [intervalInMilliseconds=100, value=3]
TimeInterval [intervalInMilliseconds=101, value=4]
可以看到,第一个数据差不多被延迟了
这个重载函数的参数为一个函数,该函数的参数为源
Observable.interval(100, TimeUnit.MILLISECONDS).take(5)
.delay(i -> Observable.timer(i * 100, TimeUnit.MILLISECONDS))
.timeInterval()
.subscribe(System.out::println);
输出:
TimeInterval [intervalInMilliseconds=152, value=0]
TimeInterval [intervalInMilliseconds=173, value=1]
TimeInterval [intervalInMilliseconds=199, value=2]
TimeInterval [intervalInMilliseconds=201, value=3]
TimeInterval [intervalInMilliseconds=199, value=4]
源i*100ms
再发射。所以后面每隔数据都比前一个数据多推迟了
delaySubscription
除了缓存数据,延迟发射缓冲的数据以外,还可以选择使用推迟订阅的方式。根据
Observable.interval(100, TimeUnit.MILLISECONDS).take(5)
.delaySubscription(1000, TimeUnit.MILLISECONDS)
.timeInterval()
.subscribe(System.out::println);
输出:
TimeInterval [intervalInMilliseconds=1114, value=0]
TimeInterval [intervalInMilliseconds=92, value=1]
TimeInterval [intervalInMilliseconds=101, value=2]
TimeInterval [intervalInMilliseconds=100, value=3]
TimeInterval [intervalInMilliseconds=99, value=4]
可以看到整个数据流推迟了
public final <U> Observable<T> delaySubscription(Func0<? extends Observable<U>> subscriptionDelay)