[英]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.