Defer

直到觀察者訂閱時才建立 Observable,並為每個觀察者建立一個新的 Observable

Defer

Defer 操作符會等待直到有觀察者訂閱它,然後它會產生一個 Observable,通常是透過 Observable 工廠函式。 它會為每個訂閱者重新執行此操作,因此,儘管每個訂閱者可能認為他們正在訂閱相同的 Observable,但實際上每個訂閱者都會獲得其自己的獨立序列。

在某些情況下,等到最後一刻(也就是訂閱時)才產生 Observable 可以確保這個 Observable 包含最新的資料。

另請參閱

特定語言資訊

待補

待補

defer

RxGroovy 將此操作符實作為 defer。 此操作符將您選擇的 Observable 工廠函式作為其唯一的參數。 此函式不接受任何參數並返回一個 Observable。

defer 預設不會在特定的排程器上操作。

switchCase

在可選的 rxjava-computation-expressions 套件中,有一個稍微相似的操作符(它不是標準 RxGroovy 操作符集的一部分)。 switchCase 操作符會根據條件建立並傳回一組可能的 Observable 之一。

ifThen

在可選的 rxjava-computation-expressions 套件中,還有一個更簡單的操作符(也不是標準 RxGroovy 操作符集的一部分),即 ifThen。 此操作符會檢查一個條件,然後根據結果鏡像來源 Observable 或一個空的 Observable。

defer

RxJava 將此操作符實作為 defer。 此操作符將您選擇的 Observable 工廠函式作為其唯一的參數。 此函式不接受任何參數並返回一個 Observable。

defer 預設不會在特定的排程器上操作。

switchCase

在可選的 rxjava-computation-expressions 套件中,有一個稍微相似的操作符(它不是標準 RxJava 操作符集的一部分)。 switchCase 操作符會根據條件建立並傳回一組可能的 Observable 之一。

ifThen

在可選的 rxjava-computation-expressions 套件中,還有一個更簡單的操作符(也不是標準 RxGroovy 操作符集的一部分),即 ifThen。 此操作符會檢查一個條件,然後根據結果鏡像來源 Observable 或一個空的 Observable。

defer

RxJS 將此操作符實作為 defer。 此操作符將您選擇的 Observable 工廠函式作為其唯一的參數。 此函式不接受任何參數並返回一個 Observable 或 Promise。

範例程式碼

/* Using an observable sequence */
var source = Rx.Observable.defer(function () {
    return 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
Completed
var source = Rx.Observable.defer(function () {
    return RSVP.Promise.resolve(42);
});

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

defer 在下列發佈版本中找到

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

RxJS 也實作了 if 操作符。它將一個返回布林值的函式作為參數,若該函式返回 true 值,則鏡像一個 Observable,並可選擇性地鏡像第二個 Observable,若該函式返回 false 值(若省略此參數,if 將在這種情況下鏡像一個空的 Observable)。

範例程式碼

var shouldRun = false;

var source = Rx.Observable.if(
    function () { return shouldRun; },
    Rx.Observable.return(42),
    Rx.Observable.return(56)
);

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

if 在下列發佈版本中找到

  • rx.all.js
  • rx.experimental.js (需要 rx.jsrx.compat.jsrx.lite.jsrx.lite.compat.js
case

RxJS 實作了一個稱為 case (或 “switchCase”) 的稍微相似的操作符。 此操作符會根據條件建立並傳回一組可能的 Observable 之一。 它接受以下參數

  1. 一個返回鍵值的函式,該鍵值決定要發出哪個 Observable
  2. 一個將這些鍵值與特定 Observable 相關聯的物件
  3. (可選)一個排程器 或 Observable
    排程器
    您希望此操作符使用的排程器
    Observable
    如果鍵值未與任何 Observable 相關聯,則要發出的預設 Observable

範例程式碼

var sources = {
    'foo': Rx.Observable.return(42),
    'bar': Rx.Observable.return(56)
};

var defaultSource = Rx.Observable.empty();

var source = Rx.Observable.case(
    function () {
        return 'foo';
    },
    sources,
    defaultSource);

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

case/switchCase 在下列發佈版本中找到

  • rx.all.js
  • rx.all.compat.js
  • rx.experimental.js (需要 rx.jsrx.compat.jsrx.lite.jsrx.lite.compat.js

待補

RxPHP 將此操作符實作為 defer

返回一個可觀察的序列,該序列在每次新的觀察者訂閱時調用指定的工廠函式。

範例程式碼

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


$source = \Rx\Observable::defer(function () {
    return \Rx\Observable::of(42);
});

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

   
Next value: 42
Complete!
    

待補

待補

待補