RxJava 学习笔记<十八> Delay延迟

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

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

日志输出:github

    咱们建立了间隔100毫秒的5个值,而后咱们将序列延迟了1秒。咱们能够看到第一个值须要〜(1000 + 100)ms,下一个值每一个须要100ms。函数

    您还能够单独延迟每一个值。spa

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

    日志输出:日志

    

    初始序列间隔100ms,结果确为200ms。若是你还记得,间隔会发出数字i = 1,2,3等。咱们将每一个项目延迟i * 100,所以第一项延迟100ms,而后第二项延迟200ms,第三项延迟300ms。连续延迟之间的差别是100ms。添加到初始100毫秒间隔,致使项目间隔200毫秒。blog

delaySubscription    

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

日志输出:ip

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

    您还能够经过如下重载基于信号可观察来延迟订阅:

    该参数是一个函数,它将为每一个订阅建立一个新的observable。订阅被延迟,直到相应的observable发出一个值。如下示例等同于咱们刚刚看到的示例。

日志输出:

delay values and subscription

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

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

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

下节继续!

有什么讨论的内容,能够加我公众号:

相关文章
相关标签/搜索