TakeUntil

在第二個 Observable 發射一個項目後,丟棄 Observable 發射的任何項目

TakeUntil 訂閱並開始鏡像源 Observable。它還會監控您提供的第二個 Observable。如果這個第二個 Observable 發射一個項目或發送一個錯誤事件,TakeUntil 返回的 Observable 將停止鏡像源 Observable 並終止。

在某些 ReactiveX 實現中,如果第二個 Observable 終止,TakeUntil 不會停止鏡像源 Observable。這很不幸且令人困惑,但我們必須接受。

另請參閱

特定語言資訊

待定

takeUntil

在 RxGroovy 中,此操作符實現為 takeUntil。請注意,第二個 Observable 可以通過發射一個項目或發出 onErroronCompleted 通知,導致 takeUntil 停止發射項目。

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

takeUntil

此操作符的第二個版本在 RxGroovy 1.1 中發布。它使用一個謂詞函數來評估源 Observable 發射的項目,而不是使用第二個 Observable 來終止結果的 Observable 序列。這樣,它的行為與 TakeWhile 類似。

takeUntil

在 RxJava 中,此操作符實現為 takeUntil。請注意,第二個 Observable 可以通過發射一個項目或發出 onErroronCompleted 通知,導致 takeUntil 停止發射項目。

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

takeUntil

此操作符的第二個版本在 RxJava 1.1 中發布。它使用一個謂詞函數來評估源 Observable 發射的項目,而不是使用第二個 Observable 來終止結果的 Observable 序列。這樣,它的行為與 TakeWhile 類似。

takeUntil

RxJS 實現了 takeUntil 操作符。您可以傳遞給它一個 Observable 或一個 Promise,它將監控其中是否有項目觸發 takeUntil 停止鏡像源 Observable。

範例程式碼

var source = Rx.Observable.timer(0, 1000)
    .takeUntil(Rx.Observable.timer(5000));

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
Next: 3
Next: 4
Completed

takeUntil 存在於以下每個發行版本中

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

還有一個 takeUntilWithTime 操作符,您可以傳遞一個絕對時間或初始持續時間,但這在 Take 操作符頁面中描述。

RxPHP 將此操作符實現為 takeUntil

返回源 Observable 序列中的值,直到其他 Observable 序列產生一個值。

範例程式碼

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

$observable = Rx\Observable::fromArray([21, 42, 63]);
$observable
    ->take(2)
    ->subscribe($stdoutObserver);

   
Next value: 21
Next value: 42
Complete!