Defer

直到观察者订阅才创建 Observable,并为每个观察者创建一个新的 Observable

Defer

Defer 运算符会等到观察者订阅它,然后它才会生成一个 Observable,通常使用 Observable 工厂函数。它对每个订阅者都会重新执行此操作,因此虽然每个订阅者都认为它正在订阅同一个 Observable,但实际上每个订阅者都获得了自己独立的序列。

在某些情况下,等到最后一刻(即直到订阅时间)才生成 Observable 可以确保这个 Observable 包含最新数据。

参见

语言特定信息

待定

待定

defer

RxGroovy 将此运算符实现为 defer。此运算符将您选择的 Observable 工厂函数作为其唯一参数。此函数不接受任何参数,并返回一个 Observable。

defer 默认情况下不会在特定 Scheduler 上运行。

switchCase

可选的 rxjava-computation-expressions 包中有一个类似的运算符(它不是标准 RxGroovy 运算符集的一部分)。switchCase 运算符根据条件创建并返回一组可能的 Observable 中的一个。

ifThen

可选的 rxjava-computation-expressions 包中还有一个更简单的运算符(它也不是标准 RxGroovy 运算符集的一部分),即 ifThen。此运算符检查一个条件,然后根据结果镜像源 Observable 或空 Observable。

defer

RxJava 将此运算符实现为 defer。此运算符将您选择的 Observable 工厂函数作为其唯一参数。此函数不接受任何参数,并返回一个 Observable。

defer 默认情况下不会在特定 Scheduler 上运行。

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 运算符。它接受一个返回布尔值的函数、一个如果该函数返回真值则要镜像的 Observable,以及可选的第二个 Observable,如果该函数返回假值则要镜像它(如果省略此参数,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. (可选)一个 Scheduler 或一个 Observable
    Scheduler
    您希望此运算符使用的 Scheduler
    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!
    

待定

待定

待定