簡體   English   中英

rxjava2中的運算符延遲

[英]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秒后發出的所有五個字符串。

  • 2019-02-21 18:02:30.285我:開始
  • 2019-02-21 18:02:33.459我:收到:阿爾法
  • 2019-02-21 18:02:33.464我:收到:Beta
  • 2019-02-21 18:02:33.466我:收到:伽瑪
  • 2019-02-21 18:02:33.467 I:收到:達美航空
  • 2019-02-21 18:02:33.469 I:收到:Epsilon

這是您想要的嗎?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM