Repeat

建立一個 Observable,該 Observable 會重複發射特定的項目多次

Repeat

Repeat 操作符會重複發射一個項目。這個操作符的一些實作允許你重複發射一個序列的項目,並且一些實作允許你限制重複的次數。

另請參閱

各語言特定資訊

待辦

repeat

RxGroovy 將此操作符實作為 repeat。它不會啟動一個 Observable,而是在 Observable 上操作,使其重複發射來源 Observable 所發射的序列作為自己的序列,可以無限重複,或者在 repeat(n) 的情況下,重複 n 次。

repeat 預設在 trampoline Scheduler 上運行。還有一個變體允許你透過傳入一個 Scheduler 作為參數來設定 Scheduler。

repeatWhen

還有一個操作符稱為 repeatWhen。它不是緩衝並重播來自來源 Observable 的序列,而是重新訂閱並鏡像來源 Observable,但僅有條件地執行。

它透過將該 Observable 的終止通知(錯誤或完成)作為 void 發射傳遞給通知處理器,來決定是否重新訂閱並重新鏡像來源 Observable。此通知處理器充當 Observable 操作符,接收一個發射這些 void 通知的 Observable 作為輸入,並回傳一個發射 void 項目的 Observable(表示,重新訂閱並鏡像來源 Observable)或終止(表示,終止 repeatWhen 發射的序列)。

repeatWhen 預設在 trampoline Scheduler 上運行。還有一個變體允許你透過傳入一個 Scheduler 作為參數來設定 Scheduler。

doWhile

在 RxGroovy 中,doWhile 不是標準操作符集的一部分,而是可選的 rxjava-computation-expressions 套件的一部分。doWhile 會在每次重複來源序列後檢查條件,只有在該條件為 true 時才會重複。

whileDo

在 RxGroovy 中,whileDo 不是標準操作符集的一部分,而是可選的 rxjava-computation-expressions 套件的一部分。whileDo 會在每次重複來源序列之前檢查條件,只有在該條件為 true 時才會重複。

repeat

RxJava 將此操作符實作為 repeat。它不會啟動一個 Observable,而是在 Observable 上操作,使其重複發射來源 Observable 所發射的序列作為自己的序列,可以無限重複,或者在 repeat(n) 的情況下,重複 n 次。

repeat 預設在 trampoline Scheduler 上運行。還有一個變體允許你透過傳入一個 Scheduler 作為參數來設定 Scheduler。

repeatWhen

還有一個操作符稱為 repeatWhen。它不是緩衝並重播來自來源 Observable 的序列,而是重新訂閱並鏡像來源 Observable,但僅有條件地執行。

它透過將該 Observable 的終止通知(錯誤或完成)作為 void 發射傳遞給通知處理器,來決定是否重新訂閱並重新鏡像來源 Observable。此通知處理器充當 Observable 操作符,接收一個發射這些 void 通知的 Observable 作為輸入,並回傳一個發射 void 項目的 Observable(表示,重新訂閱並鏡像來源 Observable)或終止(表示,終止 repeatWhen 發射的序列)。

repeatWhen 預設在 trampoline Scheduler 上運行。還有一個變體允許你透過傳入一個 Scheduler 作為參數來設定 Scheduler。

doWhile

在 RxJava 中,doWhile 不是標準操作符集的一部分,而是可選的 rxjava-computation-expressions 套件的一部分。doWhile 會在每次重複來源序列後檢查條件,只有在該條件為 true 時才會重複。

whileDo

在 RxJava 中,whileDo 不是標準操作符集的一部分,而是可選的 rxjava-computation-expressions 套件的一部分。whileDo 會在每次重複來源序列之前檢查條件,只有在該條件為 true 時才會重複。

repeat

RxJS 將此操作符實作為 repeat。它接受要重複的項目作為參數,並可選地接受另外兩個參數:你希望重複該項目的次數,以及你希望執行此操作的 Scheduler(預設使用 immediate Scheduler)。

範例程式碼

var source = Rx.Observable.repeat(42, 3);

var subscription = source.subscribe(
    function (x) { console.log('Next: ' + x); },
    function (err) { console.log('Error: ' + err); },
    function () { console.log('Completed'); });
Next: 42
Next: 42
Next: 42
Completed

repeat 可以在以下發行版中找到

  • rx.js
  • rx.compat.js
  • rx.lite.js
  • rx.lite.compat.js
doWile

RxJS 還實作了 doWhile 操作符。只要你指定的條件保持為 true,它就會重複來源 Observable 的發射序列。

var i = 0;

var source = Rx.Observable.return(42).doWhile(
    function (x) { return ++i < 2; });

var subscription = source.subscribe(
    function (x) { console.log('Next: ' + x); },
    function (err) { console.log('Error: ' + err); },
    function () { console.log('Completed'); });
Next: 42
Next: 42
Completed

doWhile 可以在以下每個發行版中找到。

  • rx.all.js
  • rx.all.compat.js
  • rx.experimental.js

它需要以下其中一個發行版

  • rx.js
  • rx.compat.js
  • rx.lite.js
  • rx.lite.compat.js
while

RxJS 還實作了 while 操作符。只有在你指定的條件為 true 時,它才會重複來源 Observable 的發射序列。

var i = 0;

// Repeat until condition no longer holds
var source = Rx.Observable.while(
    function () { return i++ < 3 },
    Rx.Observable.return(42)
);

var subscription = source.subscribe(
    function (x) { console.log('Next: ' + x); },
    function (err) { console.log('Error: ' + err); },
    function () { console.log('Completed'); });
Next: 42
Next: 42
Next: 42
Completed

while 可以在 rx.experimental.js 發行版中找到。它需要以下其中一個發行版

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

待辦

RxPHP 將此操作符實作為 repeat

產生一個 Observable 序列,該序列會將給定的元素重複指定的次數。

範例程式碼

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

$source = \Rx\Observable::range(1, 3)
    ->repeat(3);

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

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

RxPHP 也有一個操作符 repeatWhen

回傳一個 Observable,該 Observable 發射與來源 Observable 相同的值,但 onCompleted 除外。來自來源的 onCompleted 通知將導致向作為 notificationHandler 函數參數提供的 Observable 發射一個計數項目。如果該 Observable 呼叫 onComplete 或 onError,則 repeatWhen 將在子訂閱上呼叫 onCompleted 或 onError。否則,此 Observable 將重新訂閱來源 observable。

範例程式碼

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

$source = Rx\Observable::of(42)
    ->repeatWhen(function (\Rx\Observable $notifications) {
        return $notifications
            ->scan(function ($acc, $x) {
                return $acc + $x;
            }, 0)
            ->delay(1000)
            ->doOnNext(function () {
                echo "1 second delay", PHP_EOL;
            })
            ->takeWhile(function ($count) {
                return $count < 2;
            });
    });

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

   
Next value: 42
1 second delay
Next value: 42
1 second delay
Complete!