【发布时间】:2018-12-14 11:35:59
【问题描述】:
在 Reactivex.IO 文档中指出
您可以通过使用 SkipLast 运算符修改 Observable 来忽略 Observable 发出的最后 n 个项目,而只关注它们之前的那些项目。
以及来自http://reactivex.io/documentation/operators/skiplast.html的图表
我的期望:SkipLast 将读取整个 Observable,直到它满足 OnCompleted,然后生成一个新的 Observable,其时间与原始时间相同,但跳过最后一个。
我的疑问:SkipLast 运算符如何知道“3”是 Observable 中的 Last 2nd Item?没有看到 OnCompleted 怎么知道 Last nth Item?
【问题讨论】:
-
observable 只需要缓存
n项就可以知道它是否到达末尾以及丢弃什么。它不必在发出之前消耗所有事件,它可以缓存n项目并在新的到达时发出最旧的。当Complete()到达时,它可以丢弃缓存的项目并自行完成 -
在这种情况下,它可以缓存
1和2,直到3到达,此时它发出1。当4到达时,它会发出4。当Complete到达时,它会丢弃3和4并完成。实际上,图中显示1是在3到达的同时发出的 -
observable 如何知道它在达到 3 时必须发出缓存值 1?
-
source code 很简单。
-
@PanagiotisKanavos 谢谢我明白了,它就像一个固定大小的队列。将项目入队,当由于溢出而发生出队时,它将 OnNext 出列值。
标签: rxjs rx-java reactive-programming system.reactive rx-java2