Switch 订阅一个发射 Observable 的 Observable。 每当它观察到这些发射的 Observable 之一,由 Switch 返回的 Observable 将取消订阅先前发射的 Observable,并开始从最新的 Observable 发射项目。 请注意,它将在源 Observable 发射新 Observable 时取消订阅先前发射的 Observable,而不是在新 Observable 发射项目时取消订阅。 这意味着,在后续 Observable 被发射以及后续 Observable 本身开始发射项目之间,先前 Observable 发射的项目将被丢弃(如上图中的黄色圆圈所示)。
待定
RxGroovy 将此操作符实现为 switchOnNext
。 默认情况下,它不会对任何特定的 Scheduler 进行操作。
switchOnNext(Observable)
RxJava 将此操作符实现为 switchOnNext
。 默认情况下,它不会对任何特定的 Scheduler 进行操作。
switchOnNext(Observable)
RxJS 将此操作符实现为 switch
var source = Rx.Observable.range(0, 3) .select(function (x) { return Rx.Observable.range(x, 3); }) .switch(); 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
switch
存在于以下每个发行版中
rx.js
rx.all.js
rx.all.compat.js
rx.compat.js
rx.lite.js
rx.lite.compat.js
待定
RxPHP 将此操作符实现为 switch
。
将一个 Observable 序列的 Observable 序列转换为一个 Observable 序列,它只产生来自最新 Observable 序列的值。
//from https://github.com/ReactiveX/RxPHP/blob/master/demo/switch/switch.php $source = Rx\Observable::range(0, 3) ->map(function ($x) { return \Rx\Observable::range($x, 3); }) ->switch(); $subscription = $source->subscribe($stdoutObserver);
Next value: 0 Next value: 1 Next value: 2 Next value: 3 Next value: 4 Complete!
RxPHP 还具有一个操作符 switchFirst
。
接收一个 Observable 的 Observable,并仅传播第一个 Observable,直到它完成,然后它开始订阅下一个 Observable。 在当前 Observable 完成之前出现的 Observable 将被丢弃,并且不会传播。 此操作符类似于 concatAll(),只是它不会保留在当前 Observable 完成之前出现的 Observable。
//from https://github.com/ReactiveX/RxPHP/blob/master/demo/switch/switchFirst.php $source = Rx\Observable::fromArray([ \Rx\Observable::interval(100)->mapTo('a'), \Rx\Observable::interval(200)->mapTo('b'), \Rx\Observable::interval(300)->mapTo('c'), ]) ->switchFirst() ->take(3); $subscription = $source->subscribe($stdoutObserver);
Next value: a Next value: a Next value: a Complete!
待定