SkipWhile

丢弃可观察对象发出的项目,直到指定的条件变为假

SkipWhile

SkipWhile 订阅源可观察对象,但忽略其发射,直到您指定的某个条件变为假,此时 SkipWhile 开始镜像源可观察对象。

另请参见

特定于语言的信息

待定

skipWhile

skipWhile 操作符返回一个可观察对象,该对象丢弃源可观察对象发出的项目,直到对源可观察对象发出的项目应用的函数返回 false 为止,此时新可观察对象发射该项目以及源可观察对象发出的其余项目。

numbers = Observable.from( [1, 2, 3, 4, 5, 6, 7, 8, 9] );

numbers.skipWhile({ (5 != it) }).subscribe(
  { println(it); },                          // onNext
  { println("Error: " + it.getMessage()); }, // onError
  { println("Sequence complete"); }          // onCompleted
);
5
6
7
8
9
Sequence complete

skipWhile 默认情况下不会对任何特定的 调度器 进行操作。

skipWhile

skipWhile 操作符返回一个可观察对象,该对象丢弃源可观察对象发出的项目,直到对源可观察对象发出的项目应用的函数返回 false 为止,此时新可观察对象发射该项目以及源可观察对象发出的其余项目。

skipWhile 默认情况下不会对任何特定的 调度器 进行操作。

skipWhile

RxJS 实现 skipWhile 操作符。您向其传递一个控制跳过过程的函数。skipWhile 为源可观察对象发出的每个项目调用该函数,直到该函数返回 false 为止,此时 skipWhile 开始镜像源可观察对象(从该项目开始)。该函数采用三个参数

  1. 发出的项目
  2. 该项目在发射序列中的零基索引
  3. 源可观察对象

您可以选择向 skipWhile 传递第二个参数。如果是这样,该项目也将作为“this”提供给您的谓词函数。

示例代码

var source = Rx.Observable.range(1, 5)
    .skipWhile(function (x) { return x < 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
Next: 5
Completed

skipWhile 位于以下每个发行版中

  • rx.js
  • rx.all.js
  • rx.all.compat.js
  • rx.compat.js
  • rx.lite.js
  • rx.lite.compat.js

RxPHP 将此操作符实现为 skipWhile

只要指定的条件为真,就跳过可观察序列中的元素,然后返回其余元素。

示例代码

//from https://github.com/ReactiveX/RxPHP/blob/master/demo/skip/skipWhile.php

$observable = Rx\Observable::range(1, 5)
    ->skipWhile(function ($x) {
        return $x < 3;
    });

$observable->subscribe($stdoutObserver);

   
Next value: 3
Next value: 4
Next value: 5
Complete!
    

RxPHP 还拥有一个 skipWhileWithIndex 操作符。

只要指定的条件为真,就跳过可观察序列中的元素,然后返回其余元素。元素的索引用于谓词函数的逻辑中。

示例代码

//from https://github.com/ReactiveX/RxPHP/blob/master/demo/skip/skipWhileWithIndex.php

$observable = Rx\Observable::range(1, 5)
    ->skipWhileWithIndex(function ($i, $value) {
        return $i < 3;
    });

$observable->subscribe($stdoutObserver);

   
Next value: 4
Next value: 5
Complete!