我是rxjava2的新手。当我读到有关它的书时,发现其中一些我对操作员延迟不了解的东西。
我们可以使用delay()运算符推迟发射。它将容纳任何收到的排放 并将每个延迟指定的时间段。如果我们想将排放延迟三倍 秒,我们可以这样做:
Outer diameter of eye = 20
Thickness of fork = 7.5
Thickness of single eye = 17.5
Diameter of pin = 10
Diameter of knuckle pin and collar = 15
前面的代码段的输出如下: 贝塔 Α 伽玛 三角洲 厄普西隆
我认为输出只是“ Alpha”,因为他们说
由于delay()在不同的调度程序上运行(例如Observable.interval()),我们 需要利用sleep()方法使应用程序保持足够长的生命周期才能看到此消息 发生。每次发射都会延迟三秒钟
延迟3s,我认为有一个发射为“ Alpha”,但它的所有发射都可以观察到。
答案 0 :(得分:0)
根据Documentation,在给定时间内延迟操作符“延迟”发射。
因此,它将显示“ 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秒后发出的所有五个字符串。
答案 1 :(得分:0)
这是您想要的吗?
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
答案 2 :(得分:0)
在您的情况下,延迟操作只会延迟所有流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));