Delay

將 Observable 的發射延遲特定時間

Delay 運算子會修改其來源 Observable,在發射來源 Observable 的每個項目之前,暫停一段特定時間(由您指定)。這會將 Observable 發射的整個項目序列在時間上向前移動指定的增量。

另請參閱

特定語言資訊

待定

待定

RxGroovy 將此運算子實作為 delaydelaySubscription 的變體。

delay

delay 的第一個變體接受定義時間長度的參數(時間量以及此時間量的單位 TimeUnit)。每次來源 Observable 發射一個項目時,delay 會啟動一個計時器,當計時器達到給定的時間長度時,從 delay 返回的 Observable 會發射相同的項目。

請注意,delay 不會以這種方式時間移動 onError 通知,但它會立即將此通知轉發給其訂閱者,同時捨棄任何待處理的 onNext 通知。但是,它會時間移動 onCompleted 通知。

預設情況下,delay 的此變體在 computation Scheduler 上運作,但您可以通過將其作為可選的第三個參數傳遞給 delay 來選擇不同的 Scheduler。

delay

delay 的另一個變體不使用恆定的延遲時間長度,而是通過將來源 Observable 中的每個項目傳遞到一個返回 Observable 的函數,然後監視這些 Observable 來設定每個項目的延遲時間長度。當任何此類 Observable 發射一個項目或完成時,delay 返回的 Observable 會發射相關聯的項目。

預設情況下,此 delay 變體不在任何特定的 Scheduler 上運行。

delay

使用每個項目 Observable 來設定延遲的 delay 變體有一個變體,允許您傳遞一個返回 Observable 的函數,該函數充當訂閱來源 Observable 的延遲計時器(如果沒有此函數,delay 會在觀察者訂閱 delay 返回的 Observable 後立即訂閱來源 Observable)。

預設情況下,此 delay 變體不在任何特定的 Scheduler 上運行。

delaySubscription

還有一個運算子可用於延遲訂閱來源 Observable:delaySubscription。它接受定義延遲時間長度的參數(時間量以及此時間量的單位 TimeUnit)。

預設情況下,此 delay 變體在 computation Scheduler 上運行,但您可以通過將其作為可選的第三個參數傳遞給 delaySubscription 來選擇不同的 Scheduler。

delaySubscription

還有一個 delaySubscription 的變體,它使用 Observable(由您提供的函數返回)而不是固定時間長度來設定訂閱延遲。

預設情況下,此 delaySubscription 變體不在任何特定的 Scheduler 上運行。

RxJava 將此運算子實作為 delaydelaySubscription 的變體。

delay

delay 的第一個變體接受定義時間長度的參數(時間量以及此時間量的單位 TimeUnit)。每次來源 Observable 發射一個項目時,delay 會啟動一個計時器,當計時器達到給定的時間長度時,從 delay 返回的 Observable 會發射相同的項目。

請注意,delay 不會以這種方式時間移動 onError 通知,但它會立即將此通知轉發給其訂閱者,同時捨棄任何待處理的 onNext 通知。但是,它會時間移動 onCompleted 通知。

預設情況下,delay 的此變體在 computation Scheduler 上運作,但您可以通過將其作為可選的第三個參數傳遞給 delay 來選擇不同的 Scheduler。

delay

delay 的另一個變體不使用恆定的延遲時間長度,而是通過將來源 Observable 中的每個項目傳遞到一個返回 Observable 的函數,然後監視這些 Observable 來設定每個項目的延遲時間長度。當任何此類 Observable 發射一個項目或完成時,delay 返回的 Observable 會發射相關聯的項目。

預設情況下,此 delay 變體不在任何特定的 Scheduler 上運行。

delay

使用每個項目 Observable 來設定延遲的 delay 變體有一個變體,允許您傳遞一個返回 Observable 的函數,該函數充當訂閱來源 Observable 的延遲計時器(如果沒有此函數,delay 會在觀察者訂閱 delay 返回的 Observable 後立即訂閱來源 Observable)。

預設情況下,此 delay 變體不在任何特定的 Scheduler 上運行。

delaySubscription

還有一個運算子可用於延遲訂閱來源 Observable:delaySubscription。它接受定義延遲時間長度的參數(時間量以及此時間量的單位 TimeUnit)。

預設情況下,此 delay 變體在 computation Scheduler 上運行,但您可以通過將其作為可選的第三個參數傳遞給 delaySubscription 來選擇不同的 Scheduler。

delaySubscription

還有一個 delaySubscription 的變體,它使用 Observable(由您提供的函數返回)而不是固定時間長度來設定訂閱延遲。

預設情況下,此 delaySubscription 變體不在任何特定的 Scheduler 上運行。

delay

在 RxJS 中,您可以通過兩種方式設定每個項目的延遲:通過將毫秒數傳遞到 delay 運算子(這會將每次發射延遲該時間量),或者通過傳遞一個 Date 物件(這會將發射序列的開始時間延遲到該絕對時間點)。

此運算子預設在 timeout Scheduler 上運作,但您可以通過將另一個 Scheduler 作為可選的第二個參數傳遞來覆蓋此設定。

範例程式碼

var source = Rx.Observable.range(0, 3)
    .delay(new Date(Date.now() + 1000));

var subscription = source.subscribe(
    function (x) { console.log('Next: ' + x.toString()); },
    function (err) { console.log('Error: ' + err); },
    function () { console.log('Completed'); }); 
Next: 0
Next: 1
Next: 2
Completed
var source = Rx.Observable.range(0, 3)
    .delay(1000);

var subscription = source.subscribe(
    function (x) { console.log('Next: ' + x.toString()); },
    function (err) { console.log('Error: ' + err); },
    function () { console.log('Completed'); });
Next: 0
Next: 1
Next: 2
Completed
delaySubscription

delaySubscription 類似於 delay,但它不是時間移動來源 Observable 的發射,而是時間移動訂閱該 Observable 的時刻。您將時間值傳遞給此運算子(可以是 Number,在這種情況下,它設定延遲的毫秒數,也可以是 Date,在這種情況下,它設定 delaySubscription 將觸發訂閱的絕對未來時間)。您可以選擇性地傳遞一個 Scheduler 作為第二個參數,delaySubscription 將使用它來控制延遲時間段或觸發時間。

範例程式碼

var start = Date.now();
var source = Rx.Observable.range(0, 3).delaySubscription(5000);

var subscription = source.subscribe(
    function (x) { console.log('Next: %s, %s', x, Date.now() - start); },
    function (err) { console.log('Error: ' + err); },
    function () { console.log('Completed'); });
Next: 0, 5001
Next: 1, 5002
Next: 2, 5003
Completed
delayWithSelector

delayWithSelector 類似於 delay,但不使用恆定的延遲時間長度(或絕對時間),而是通過將來源 Observable 中的每個項目傳遞到一個返回 Observable 的函數,然後監視這些 Observable 來設定每個項目的延遲時間長度。當任何此類 Observable 完成時,delay 返回的 Observable 會發射相關聯的項目。

範例程式碼

var source = Rx.Observable
    .range(0, 3)
    .delayWithSelector(
        function (x) {
            return Rx.Observable.timer(x * 400);
        })
    .timeInterval()
    .map(function (x) { return x.value + ':' + x.interval; });

var subscription = source.subscribe(
    function (x) { console.log('Next: ' + x); },
    function (err) { console.log('Error: ' + err); },
    function () { console.log('Completed'); });
Next: 0:0
Next: 1:400
Next: 2:400
Completed
delayWithSelector

還有一個 delayWithSelector 的版本,它接受一個額外的(第一個)參數:一個 Observable,它設定在 delayWithSelector 訂閱來源 Observable 之前(在其自身訂閱之後)的延遲。

範例程式碼

var source = Rx.Observable
    .range(0, 3)
    .delayWithSelector(
        Rx.Observable.timer(300),
        function (x) {
            return Rx.Observable.timer(x * 400);
        }
    )
    .timeInterval()
    .map(function (x) { return x.value + ':' + x.interval; });

var subscription = source.subscribe(
    function (x) { console.log('Next: ' + x); },
    function (err) { console.log('Error: ' + err); },
    function () { console.log('Completed'); });
Next: 0:300
Next: 1:400
Next: 2:400
Completed

delaydelaySubscriptiondelayWithSelector 需要 rx.lite.jsrx.lite.compat.js,並且在以下每個發行版中都可以找到

  • rx.all.js
  • rx.all.compat.js
  • rx.time.js(需要 rx.jsrx.compat.js

RxPHP 將此運算子實作為 delay

將可觀察序列時間移動 dueTime。值之間的相對時間間隔會保留。

範例程式碼

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

\Rx\Observable::interval(1000)
    ->doOnNext(function ($x) {
        echo 'Side effect: ' . $x . "\n";
    })
    ->delay(500)
    ->take(5)
    ->subscribe($createStdoutObserver());

   
Side effect: 0
Next value: 0
Side effect: 1
Next value: 1
Side effect: 2
Next value: 2
Side effect: 3
Next value: 3
Side effect: 4
Next value: 4
Complete!
    

待定