反应式分机运营商SkipLast如何工作?

时间:2018-12-14 11:36:00

标签: rxjs rx-java reactive-programming system.reactive rx-java2

在Reactivex.IO文档中指出

  

通过使用SkipLast运算符修改Observable,可以忽略Observable发出的最后n个项目,而只关注它们之前的那些项目。

http://reactivex.io/documentation/operators/skiplast.html中的图表 enter image description here

我的期望:SkipLast将读取整个Observable,直到满足OnCompleted,然后生成一个新的Observable,其计时与原始计时相同,但跳过最后一个计时。

我的怀疑:SkipLast运算符如何知道“ 3”是可观察对象中的最后第二个项目?没有看到OnCompleted怎么知道最后n个项目?

2 个答案:

答案 0 :(得分:0)

感谢@ PanagiotisKanavos,@ akarnokd的宝贵意见。

在内部使用固定大小的队列实现。从序列中取出项目并排队,当队列已满并开始溢出时,将项目出队并排队最新值并发送到OnNext(dequeued_value),因此当OnCompleted Reached到达时,您将不发送缓存的项目,而仅调用OnCompleted 。到此为止,已跳过N个缓存的项目。

答案 1 :(得分:0)

如果使用skipLast(N),则从source code发送N消息,并将其保留在this._ring数组中。 N + 1到达第一条消息后,N + 2到达=>第二条消息等。