繁体   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