java delay 函数_RxJava 学习笔记<十八> Delay延迟

顾名思义,将推迟在指定时间内发出的值。有两种方法可以做到这一点。一种是存储值,直到您准备好发射它们为止。另一种是将订阅延迟。

最简单的Delay实现会使每个值延迟相同的时间。您可以将其视为延迟序列的开始,同时保持连续元素之间的时间间隔。

ae563d052f6a019f82c2316ef5d1be96.png

6ed55d925c2167d7e774b8cd30951222.png

日志输出:

e59f11f09eae3541a1b9f93338a2bbe9.png

我们创建了间隔100毫秒的5个值,然后我们将序列延迟了1秒。我们可以看到第一个值需要〜(1000 + 100)ms,下一个值每个需要100ms。

您还可以单独延迟每个值。

626b2965233020f92ae38c27c0dcfb89.png

此重载采用一个函数,该函数将为每个项创建一个observable。当该observable发出onNext时,相应的项目将以延迟的顺序发出。这是一些代码:

14425d976e5893ea5b9990aacbd17dc4.png

日志输出:

4b58abd08a3c7858ce1a0214049a29d8.png

初始序列间隔100ms,结果确为200ms。如果你还记得,间隔会发出数字i = 1,2,3等。我们将每个项目延迟i * 100,因此第一项延迟100ms,然后第二项延迟200ms,第三项延迟300ms。连续延迟之间的差异是100ms。添加到初始100毫秒间隔,导致项目间隔200毫秒。

delaySubscription

您可以完全延迟订阅,而不是存储值并在以后发布它们。根据观察结果是热还是冷,这将产生不同的效果。这将在热和冷的observables章节中进行更多讨论。对于我们到目前为止的示例,可观察量是冷的,订阅事件是在创建源可观察量时(即序列的开始)。这意味着在将每个项目延迟相同数量并延迟订阅之间的顺序没有区别。由于这是这种情况,延迟订阅更有效,因为操作员不需要在内部缓冲项目。

cdd78b139dcef3bc36ba3e3aaecd1ab9.png

日志输出:

d1374b990e5d3dfa434b0f6b404633bb.png

我们在这里看到的是间隔可观察(即其创建)的订阅被延迟了1000ms。之后,序列按照定义进行。

您还可以通过以下重载基于信号可观察来延迟订阅:

0eb89fde97eacfed0cf688af34c93621.png    该参数是一个函数,它将为每个订阅创建一个新的observable。订阅被延迟,直到相应的observable发出一个值。以下示例等同于我们刚刚看到的示例。

5713b2b4f3024a8edd2d01b76c2a800d.png

日志输出:

a3ac395e7008e539bbb5ddb6053bc09c.png

delay values and subscription

此类别中的最后一种方法允许您单独延迟订阅和每个项目。

c2f7c0cc4ac270a211a3df41e3ac2006.png

4decc725160d3c94692f937b337ab4e8.png

这结合了我们已经看到的两种延迟变体。第一个参数是一个函数,它创建一个observable,用于指示何时执行订阅。第二个参数采用每个项目并决定应该延迟多长时间。

原文:https://github.com/Froussios/Intro-To-RxJava/blob/master/Part%203%20-%20Taming%20the%20sequence/5.%20Time-shifted%20sequences.md

下节继续!

有什么讨论的内容,可以加我公众号:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值