TakeWhile

鏡射 Observable 發射的項目,直到指定的條件變為 false 為止

TakeWhile

TakeWhile 會鏡射來源 Observable,直到您指定的條件變為 false 為止,此時 TakeWhile 會停止鏡射來源 Observable 並終止其自身的 Observable。

參見

特定語言資訊

待辦

takeWhile

takeWhile 運算子會回傳一個 Observable,該 Observable 會鏡射來源 Observable 的行為,直到套用至該 Observable 發射之項目的函式回傳 false 為止,此時新的 Observable 會以 onCompleted 通知終止。

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

numbers.takeWhile({ ((it < 6) || (0 == (it % 2))) }).subscribe(
  { println(it); },                          // onNext
  { println("Error: " + it.getMessage()); }, // onError
  { println("Sequence complete"); }          // onCompleted
);
1
2
3
4
5
6
Sequence complete

takeWhile 預設不會在任何特定的 Scheduler 上運作。

takeWhile

takeWhile 運算子會回傳一個 Observable,該 Observable 會鏡射來源 Observable 的行為,直到套用至該 Observable 發射之項目的函式回傳 false 為止,此時新的 Observable 會以 onCompleted 通知終止。

takeWhile 預設不會在任何特定的 Scheduler 上運作。

takeWhile

RxJS 實作了 takeWhile 運算子。您會傳遞一個函式來控管擷取流程。takeWhile 會針對來源 Observable 發射的每個項目呼叫該函式,直到該函式回傳 false 為止,此時 takeWhile 會停止鏡射來源 Observable (從該項目開始) 並發出 onCompleted 通知。該函式接受三個參數

  1. 發射的項目
  2. 該項目在發射序列中的從零開始的索引
  3. 來源 Observable

您可以選擇性地將第二個參數傳遞至 takeWhile。如果這樣做,該項目也將可作為 "this" 提供給您的述詞函式。

範例程式碼

var source = Rx.Observable.range(1, 5)
    .takeWhile(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: 0
Next: 1
Next: 2
Completed

takeWhile 在以下每個發行版本中都有提供

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

RxPHP 將此運算子實作為 takeWhile

只要指定的條件為 true,就會從可觀察序列回傳元素。它會將一個回呼作為參數,以測試每個來源元素的條件。回呼述詞會以元素的值來呼叫。

範例程式碼

//from https://github.com/ReactiveX/RxPHP/blob/master/demo/take/takeWhile.php


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

$subscription = $source->subscribe($stdoutObserver);


   
Next value: 1
Next value: 2
Complete!
    

RxPHP 也有一個運算子 takeWhileWithIndex

只要指定的條件為 true,就會從可觀察序列回傳元素。它會將一個回呼作為參數,以測試每個來源元素的條件。回呼述詞會以元素的索引和值來呼叫。

範例程式碼

//from https://github.com/ReactiveX/RxPHP/blob/master/demo/take/takeWhileWithIndex.php


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

$subscription = $source->subscribe($stdoutObserver);


   
Next value: 1
Next value: 2
Next value: 3
Complete!