重复

创建一个可观察对象,它多次发射特定项

Repeat

Repeat 运算符重复发射项。此运算符的一些实现允许您重复一个序列的项,而另一些允许您限制重复的次数。

另请参阅

特定语言信息

待定

repeat

RxGroovy 使用 repeat 实现此运算符。它不会初始化一个可观察对象,而是对可观察对象进行操作,使其以无限循环的方式重复源可观察对象发射的序列,或者在 repeat(n) 的情况下,重复 n 次。

repeat 默认在 trampoline 调度器 上运行。还有一种变体允许您通过传入参数设置调度器。

repeatWhen

还有一种运算符称为 repeatWhen。它不会缓冲和重放源可观察对象的序列,而是重新订阅并镜像源可观察对象,但只在特定条件下。

它通过将源可观察对象的终止通知(错误或已完成)作为 void 发射传递给通知处理程序来决定是否重新订阅和镜像源可观察对象。此通知处理程序充当一个可观察对象运算符,将发射这些 void 通知作为输入的可观察对象作为输入,并返回一个发射 void 项(表示重新订阅和镜像源可观察对象)或终止(表示终止 repeatWhen 发射的序列)的可观察对象。

repeatWhen 默认在 trampoline 调度器 上运行。还有一种变体允许您通过传入参数设置调度器。

doWhile

在 RxGroovy 中,doWhile 不是标准运算符集的一部分,而是可选的 rxjava-computation-expressions 包的一部分。doWhile 在源序列的每次重复之后检查条件,只有当条件为真时才会重复。

whileDo

在 RxGroovy 中,whileDo 不是标准运算符集的一部分,而是可选的 rxjava-computation-expressions 包的一部分。whileDo 在源序列的每次重复之前检查条件,只有当条件为真时才会重复。

repeat

RxJava 使用 repeat 实现此运算符。它不会初始化一个可观察对象,而是对可观察对象进行操作,使其以无限循环的方式重复源可观察对象发射的序列,或者在 repeat(n) 的情况下,重复 n 次。

repeat 默认在 trampoline 调度器 上运行。还有一种变体允许您通过传入参数设置调度器。

repeatWhen

还有一种运算符称为 repeatWhen。它不会缓冲和重放源可观察对象的序列,而是重新订阅并镜像源可观察对象,但只在特定条件下。

它通过将源可观察对象的终止通知(错误或已完成)作为 void 发射传递给通知处理程序来决定是否重新订阅和镜像源可观察对象。此通知处理程序充当一个可观察对象运算符,将发射这些 void 通知作为输入的可观察对象作为输入,并返回一个发射 void 项(表示重新订阅和镜像源可观察对象)或终止(表示终止 repeatWhen 发射的序列)的可观察对象。

repeatWhen 默认在 trampoline 调度器 上运行。还有一种变体允许您通过传入参数设置调度器。

doWhile

在 RxJava 中,doWhile 不是标准运算符集的一部分,而是可选的 rxjava-computation-expressions 包的一部分。doWhile 在源序列的每次重复之后检查条件,只有当条件为真时才会重复。

whileDo

在 RxJava 中,whileDo 不是标准运算符集的一部分,而是可选的 rxjava-computation-expressions 包的一部分。whileDo 在源序列的每次重复之前检查条件,只有当条件为真时才会重复。

repeat

RxJS 使用 repeat 实现此运算符。它接受要重复的项作为其参数,并可以选择接受另外两个参数:您希望项重复的次数,以及您希望执行此操作的 调度器(默认情况下使用 immediate 调度器)。

示例代码

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 运算符。它只在您指定的条件保持为真的情况下重复源可观察对象的序列发射。

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 运算符。它只在您指定的条件为真的情况下重复源可观察对象的序列发射。

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 实现此运算符。

生成一个可观察对象序列,该序列重复给定元素指定的次数。

示例代码

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

返回一个可观察对象,它发射与源可观察对象相同的值,除了 onCompleted。来自源的 onCompleted 通知将导致将计数项发射到作为参数传递给 notificationHandler 函数的可观察对象。如果该可观察对象调用 onComplete 或 onError,则 repeatWhen 将在子订阅上调用 onCompleted 或 onError。否则,此可观察对象将重新订阅源可观察对象。

示例代码

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