Spec-Zone.ru › ReactiveX

Переключатель

преобразует Observable, испускающий Observables, в одно Observable, которое испускает элементы, испускаемые самым последним из этих Observables
Switch

Переключатель подписывается на Observable, который испускает Observables. Каждый раз, когда он наблюдает за одним из этих испущенных Observables, Observable, возвращаемый Переключателем, отписывается от ранее испущенного Observable и начинает испускать элементы из последнего Observable. Обратите внимание, что он отписывается от ранее испущенного Observable, когда из исходного Observable испускается новое Observable, а не когда новое Observable испускает элемент. Это означает, что элементы, испускаемые предыдущим Observable между временем испускания последующего Observable и временем, когда последующее Observable начинает испускать элементы, будут пропущены (как и жёлтый круг на диаграмме выше).

См. также

  • Amb
  • Concat
  • FlatMap
  • Введение в Rx: Переключатель

Информация, специфичная для языка

RxGroovy switchOnNext

switch

RxGroovy реализует этот оператор как switchOnNext. По умолчанию он не работает с каким-либо конкретным Планировщиком.

  • Javadoc: switchOnNext(Observable)

RxJava 1․x switchOnNext

switch

RxJava реализует этот оператор как switchOnNext. По умолчанию он не работает с каким-либо конкретным Планировщиком.

  • Javadoc: switchOnNext(Observable)

RxJS switch

switch

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 switchFirst

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. Observables, которые появляются до завершения текущего Observable, будут отброшены и не будут распространяться. Этот оператор аналогичен concatAll(), за исключением того, что он не будет удерживать Observables, которые поступают до завершения текущего.

Пример кода

//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!

© ReactiveX contributors
Licensed under the Apache License 2.0.
http://reactivex.io/documentation/operators/switch.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API