[英]operator delay in rxjava2
我是新的rxjava2.when,当我读到有关它的书时,有一些我不了解操作员延迟的信息。
我们可以使用delay()运算符推迟发射。 它将保留所有收到的排放,并将每个排放延迟指定的时间段。 如果我们想将发射延迟三秒钟,我们可以这样做:
public static void main(String[] args) {
Observable.just("Alpha", "Beta", "Gamma" ,"Delta",
"Epsilon")
.delay(3000, TimeUnit.SECONDS)
.subscribe(s -> System.out.println("Received: " + s));
sleep(3000);
}
public static void sleep(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
前面的代码段的输出如下:Beta Alpha Gamma Delta Epsilon
我认为输出只是“ Alpha”,因为他们说
因为delay()在不同的调度程序(例如Observable.interval())上运行,所以我们需要利用sleep()方法使应用程序保持足够长的生命周期才能看到这种情况。 每次发射将延迟三秒钟
延迟3s,我认为有一个发射为“ Alpha”,但它的所有发射都是可观察到的。
根据文档 ,延迟操作员在给定时间内“延迟”发射。
因此,它将显示“ Alpha”,“ Beta”,“ Gamma”,“ Delta”,“ Epsilon”,而不仅仅是“ Alpha”。
println("started")
val subscribe = Observable.just("Alpha", "Beta", "Gamma", "Delta", "Epsilon")
.delay(3, TimeUnit.SECONDS)
.subscribe { s -> println("Received: $s") }
此代码将产生3秒后发出的所有五个字符串。
这是您想要的吗?
val source1 = Observable.just("Alpha", "Beta", "Gamma", "Delta", "Epsilon")
val source2 = Observable.interval(3000, TimeUnit.MILLISECONDS)
val observable = Observable.zip(source1, source2, object : BiFunction<String, Long, Any> {
override fun apply(t1: String, t2: Long): Any {
Log.d("Sometag", "Received $t1")
return "Something"
}
}).subscribe()
输出量
2019-02-21 13:40:15.502 D/Sometag: Received Alpha
2019-02-21 13:40:18.502 D/Sometag: Received Beta
2019-02-21 13:40:21.502 D/Sometag: Received Gamma
2019-02-21 13:40:24.502 D/Sometag: Received Delta
2019-02-21 13:40:27.502 D/Sometag: Received Epsilon
在您的情况下,延迟操作将仅延迟所有流3秒,并且所有元素将立即发出,更多信息请参见rx文档http://reactivex.io/documentation/operators/delay.html
如果您想将每个元素延迟3秒,您可以这样做:
Observable.fromArray("Alpha", "Beta", "Gamma", "Delta",
"Epsilon")
.concatMap(s -> Observable.just(s).delay(3, TimeUnit.SECONDS))
.subscribe(s -> System.out.println("Received: " + s));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.