您可以忽略 Observable 发出的前 n 个项目,只关注之后发出的项目,方法是使用 Skip 运算符修改 Observable。
skip
drop
待定
在 RxGroovy 中,此运算符实现为 skip。
numbers = Observable.from([1, 2, 3, 4, 5, 6, 7, 8]); numbers.skip(3).subscribe( { println(it); }, // onNext { println("Error: " + it.getMessage()); }, // onError { println("Sequence complete"); } // onCompleted );
4 5 6 7 8 Sequence complete
这种 skip 变体默认情况下不会对任何特定 调度器 进行操作。
skip(int)
还有一种 skip 变体,它接受一个时间持续时间,而不是项目数量。它会丢弃在源 Observable 生命周期的初始持续时间内发出的那些项目。您可以通过向 skip 传入时间长度和此长度的单位作为参数来设置此持续时间。
这种 skip 变体默认情况下会在 computation 调度器 上操作,但您也可以将您选择的调度器作为可选的第三个参数传入。
computation
skip(long,TimeUnit)
skip(long,TimeUnit,Scheduler)
在 RxJava 中,此运算符实现为 skip。
skip skipUntilWithTime
RxJS 实现 skip 运算符。
var source = Rx.Observable.range(0, 5) .skip(3); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); });
Next: 3 Next: 4 Completed
skip 位于以下每个发行版中
rx.js
rx.all.js
rx.all.compat.js
rx.compat.js
rx.lite.js
rx.lite.compat.js
RxJS 还实现了一个 skipUntilWithTime 运算符,它不会从源 Observable 跳过特定数量的项目,而是根据时间顺序跳过项目。您可以通过向 skipUntilWithTime 传入参数来设置此跳过时间段,可以使用以下两种格式之一
skipUntilWithTime
Date
您也可以选择将 调度器 作为第二个参数传入,计时器将在该调度器上运行 (skipUntilWithTime 默认使用 timeout 调度器)。
timeout
var source = Rx.Observable.timer(0, 1000) .skipUntilWithTime(5000); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); });
Next: 6 Next: 7 Next: 8 Completed
skipUntilWithTime 位于以下每个发行版中
rx.time.js
Skip
RxPHP 将此运算符实现为 skip。
//from https://github.com/ReactiveX/RxPHP/blob/master/demo/skip/skip.php use Rx\Observable\ArrayObservable; $observable = Rx\Observable::fromArray([1, 1, 2, 3, 5, 8, 13]); $observable ->skip(3) ->subscribe($stdoutObserver);
Next value: 3 Next value: 5 Next value: 8 Next value: 13 Complete!
skip skip_with_time