Повторение
создать Observable, который многократно испускает определённый элемент
Оператор Repeat многократно испускает элемент. Некоторые реализации этого оператора позволяют вам повторять последовательность элементов, а некоторые — ограничить количество повторений.
См. также
Информация, специфичная для языка
RxGroovy doWhile repeat repeatWhen whileDo
RxGroovy реализует этот оператор как repeat. Он не инициирует Observable, а работает с Observable таким образом, что повторяет последовательность, испускаемую исходным Observable, как собственную последовательность, либо бесконечно, либо, в случае repeat(n), n раз.
repeat по умолчанию работает с trampoline Расписанием. Также есть вариант, позволяющий установить расписание, передав его в качестве параметра.
- Javadoc:
repeat() - Javadoc:
repeat(long) - Javadoc:
repeat(Scheduler) - Javadoc:
repeat(long,Scheduler)
Также есть оператор под названием repeatWhen. Вместо буферизации и повторного воспроизведения последовательности из исходного Observable, он подписывается заново и отображает исходное Observable, но только при определённых условиях.
Он принимает решение о повторной подписке и отображении исходного Observable, передавая уведомления о завершении этого Observable (ошибка или завершение) обработчику уведомлений в качестве испускаемых void элементов. Этот обработчик уведомлений действует как оператор Observable, принимая Observable, который испускает эти void уведомления в качестве входных данных, и возвращает Observable, который испускает void элементы (то есть, подписывается заново и отображает исходное Observable) или завершается (то есть, завершает последовательность, испускаемую repeatWhen).
repeatWhen по умолчанию работает с trampoline расписанием. Также есть вариант, позволяющий установить расписание, передав его в качестве параметра.
- Javadoc:
repeatWhen(Func1) - Javadoc:
repeatWhen(Func1,Scheduler)
В RxGroovy, doWhile не входит в стандартный набор операторов, но является частью необязательного пакета rxjava-computation-expressions. doWhile проверяет условие после каждого повторения исходной последовательности и повторяет её только в том случае, если это условие истинно.
В RxGroovy, whileDo не входит в стандартный набор операторов, но является частью необязательного пакета rxjava-computation-expressions. whileDo проверяет условие перед каждым повторением исходной последовательности и повторяет её только в том случае, если это условие истинно.
RxJava 1․x doWhile repeat repeatWhen whileDo
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. Вместо буферизации и повторного воспроизведения последовательности из исходного Observable, он подписывается заново и отражает исходное Observable, но только при определённых условиях.
Он определяет, следует ли подписываться заново и повторно отражать исходное Observable, передавая уведомления о завершении этого Observable (ошибка или завершение) в обработчик уведомлений в качестве испусканий void. Этот обработчик уведомлений действует как оператор Observable, принимающий Observable, испускающий эти void уведомления в качестве входных данных, и возвращающий Observable, испускающий void элементы (то есть подписывается заново и отображает исходное Observable) или завершает (то есть завершает последовательность, испускаемую repeatWhen).
repeatWhen по умолчанию работает на trampoline Scheduler. Также есть вариант, позволяющий указать Scheduler, передав его в качестве параметра.
- Javadoc:
repeatWhen(Func1) - Javadoc:
repeatWhen(Func1,Scheduler)
В RxJava, doWhile не входит в стандартный набор операторов, но является частью необязательного пакета rxjava-computation-expressions. doWhile проверяет условие после каждого повторения исходной последовательности и повторяет её только в том случае, если это условие истинно.
В RxJava, whileDo не входит в стандартный набор операторов, но является частью необязательного пакета rxjava-computation-expressions. whileDo проверяет условие перед каждым повторением исходной последовательности и повторяет её только в том случае, если это условие истинно.
RxJS doWhile repeat while
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.jsrx.compat.jsrx.lite.jsrx.lite.compat.js
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.jsrx.all.compat.jsrx.experimental.js
Требуется один из следующих дистрибутивов:
rx.jsrx.compat.jsrx.lite.jsrx.lite.compat.js
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.jsrx.compat.jsrx.lite.jsrx.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