Spec-Zone.ru › ReactiveX

Повторение

создать Observable, который многократно испускает определённый элемент
Repeat

Оператор Repeat многократно испускает элемент. Некоторые реализации этого оператора позволяют вам повторять последовательность элементов, а некоторые — ограничить количество повторений.

См. также

  • Interval
  • Range
  • Вводный курс по Rx: Повторение

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

RxGroovy doWhile repeat repeatWhen whileDo

repeat

RxGroovy реализует этот оператор как repeat. Он не инициирует Observable, а работает с Observable таким образом, что повторяет последовательность, испускаемую исходным Observable, как собственную последовательность, либо бесконечно, либо, в случае repeat(n), n раз.

repeat по умолчанию работает с trampoline Расписанием. Также есть вариант, позволяющий установить расписание, передав его в качестве параметра.

  • Javadoc: repeat()
  • Javadoc: repeat(long)
  • Javadoc: repeat(Scheduler)
  • Javadoc: repeat(long,Scheduler)
repeatWhen

Также есть оператор под названием repeatWhen. Вместо буферизации и повторного воспроизведения последовательности из исходного Observable, он подписывается заново и отображает исходное Observable, но только при определённых условиях.

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

repeatWhen по умолчанию работает с trampoline расписанием. Также есть вариант, позволяющий установить расписание, передав его в качестве параметра.

  • Javadoc: repeatWhen(Func1)
  • Javadoc: repeatWhen(Func1,Scheduler)
doWhile

В RxGroovy, doWhile не входит в стандартный набор операторов, но является частью необязательного пакета rxjava-computation-expressions. doWhile проверяет условие после каждого повторения исходной последовательности и повторяет её только в том случае, если это условие истинно.

whileDo

В RxGroovy, whileDo не входит в стандартный набор операторов, но является частью необязательного пакета rxjava-computation-expressions. whileDo проверяет условие перед каждым повторением исходной последовательности и повторяет её только в том случае, если это условие истинно.

RxJava 1․x doWhile repeat repeatWhen whileDo

repeat

RxJava реализует этот оператор как repeat. Он не инициирует Observable, а работает с Observable таким образом, что повторяет последовательность, испускаемую исходным Observable, как свою собственную последовательность, либо бесконечно, либо, в случае repeat(n), n раз.

repeat по умолчанию работает на trampoline Scheduler. Также есть вариант, позволяющий указать Scheduler, передав его в качестве параметра.

  • Javadoc: repeat()
  • Javadoc: repeat(long)
  • Javadoc: repeat(Scheduler)
  • Javadoc: repeat(long,Scheduler)
repeatWhen

Также существует оператор под названием repeatWhen. Вместо буферизации и повторного воспроизведения последовательности из исходного Observable, он подписывается заново и отражает исходное Observable, но только при определённых условиях.

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

repeatWhen по умолчанию работает на trampoline Scheduler. Также есть вариант, позволяющий указать Scheduler, передав его в качестве параметра.

  • Javadoc: repeatWhen(Func1)
  • Javadoc: repeatWhen(Func1,Scheduler)
doWhile

В RxJava, doWhile не входит в стандартный набор операторов, но является частью необязательного пакета rxjava-computation-expressions. doWhile проверяет условие после каждого повторения исходной последовательности и повторяет её только в том случае, если это условие истинно.

whileDo

В RxJava, whileDo не входит в стандартный набор операторов, но является частью необязательного пакета rxjava-computation-expressions. whileDo проверяет условие перед каждым повторением исходной последовательности и повторяет её только в том случае, если это условие истинно.

RxJS doWhile repeat while

repeat

RxJS реализует этот оператор как repeat. Он принимает в качестве параметра повторяемый элемент и, необязательно, два других параметра: количество повторений и Scheduler, на котором нужно выполнить операцию (по умолчанию используется immediate Scheduler).

Пример кода

var source = Rx.Observable.repeat(42, 3);

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

repeat можно найти в следующих дистрибутивах:

  • rx.js
  • rx.compat.js
  • rx.lite.js
  • rx.lite.compat.js
doWile

RxJS также реализует оператор doWhile. Он повторяет последовательность испусканий исходного Observable только до тех пор, пока указанное вами условие остается истинным.

var i = 0;

var source = Rx.Observable.return(42).doWhile(
    function (x) { return ++i < 2; });

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

doWhile можно найти в каждом из следующих дистрибутивов.

  • rx.all.js
  • rx.all.compat.js
  • rx.experimental.js

Требуется один из следующих дистрибутивов:

  • rx.js
  • rx.compat.js
  • rx.lite.js
  • rx.lite.compat.js
while

RxJS также реализует оператор while. Он повторяет последовательность испусканий исходного Observable только если указанное вами условие истинно.

var i = 0;

// Repeat until condition no longer holds
var source = Rx.Observable.while(
    function () { return i++ < 3 },
    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
Next: 42
Next: 42
Completed

while можно найти в дистрибутиве rx.experimental.js. Требуется один из следующих дистрибутивов:

  • rx.js
  • rx.compat.js
  • rx.lite.js
  • rx.lite.compat.js

RxPHP repeat repeatWhen

RxPHP реализует этот оператор как repeat.

Генерирует последовательность наблюдаемых, которая повторяет заданный элемент указанное количество раз.

Пример кода

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

$source = \Rx\Observable::range(1, 3)
    ->repeat(3);

$subscription = $source->subscribe($createStdoutObserver());
Next value: 1
Next value: 2
Next value: 3
Next value: 1
Next value: 2
Next value: 3
Next value: 1
Next value: 2
Next value: 3
Complete!

RxPHP также имеет оператор repeatWhen.

Возвращает Observable, который испускает те же значения, что и исходное Observable, за исключением onCompleted. Уведомление onCompleted от источника приведет к испусканию элемента счётчика в Observable, предоставленное в качестве аргумента функции notificationHandler. Если это Observable вызывает onComplete или onError, то repeatWhen вызовет onCompleted или onError в дочерней подписке. В противном случае это Observable подпишется на исходное observable.

Пример кода

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

$source = Rx\Observable::of(42)
    ->repeatWhen(function (\Rx\Observable $notifications) {
        return $notifications
            ->scan(function ($acc, $x) {
                return $acc + $x;
            }, 0)
            ->delay(1000)
            ->doOnNext(function () {
                echo "1 second delay", PHP_EOL;
            })
            ->takeWhile(function ($count) {
                return $count < 2;
            });
    });

$subscription = $source->subscribe($createStdoutObserver());
Next value: 42
1 second delay
Next value: 42
1 second delay
Complete!

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

Spec-Zone.ru

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