在Reactivex.IO文档中指出
通过使用SkipLast运算符修改Observable,可以忽略Observable发出的最后n个项目,而只关注它们之前的那些项目。
和http://reactivex.io/documentation/operators/skiplast.html中的图表
我的期望:SkipLast将读取整个Observable,直到满足OnCompleted,然后生成一个新的Observable,其计时与原始计时相同,但跳过最后一个计时。
我的怀疑:SkipLast运算符如何知道“ 3”是可观察对象中的最后第二个项目?没有看到OnCompleted怎么知道最后n个项目?
答案 0 :(得分:0)
感谢@ PanagiotisKanavos,@ akarnokd的宝贵意见。
在内部使用固定大小的队列实现。从序列中取出项目并排队,当队列已满并开始溢出时,将项目出队并排队最新值并发送到OnNext(dequeued_value),因此当OnCompleted Reached到达时,您将不发送缓存的项目,而仅调用OnCompleted 。到此为止,已跳过N个缓存的项目。
答案 1 :(得分:0)
如果使用skipLast(N)
,则从source code发送N
消息,并将其保留在this._ring
数组中。 N + 1到达第一条消息后,N + 2到达=>第二条消息等。