Rx 随机间隔

Rx randomInterval

我需要一种方法来创建 randomInterval 流(类似于 interval)。

它应该产生这样的流:

V-V-----V--V-V-VVV-V

interval 创建流时:

V--V--V--V--V--V--V--V

我怎样才能实现这种行为?

这个问题已经在这里问过了。比照RXJS: How can I generate a stream of numbers at random intervals (within a specified range)?

只有当您想要生成的随机间隔数量有限时,您才应该能够从中得出问题的答案。

var source = Rx.Observable
  .range(1, 10)
  .concatMap(function (x) {
    return Rx.Observable
      .of(x)
      .delay(randomDelay(1000,5000));
  })
 .timeInterval();

对于无限生成随机间隔的版本:

function sum(a,b) {return a+b}

var source = Rx.Observable.of(1)
 .flatMap(x => Rx.Observable.of(x).delay(randomDelay(bottom,top))
 .repeat()
 .scan(sum, initialNumber)

 function randomDelay(bottom, top) {
  return Math.floor( Math.random() * ( 1 + top - bottom ) ) + bottom;
}

 source.subscribe(function(x){console.log(x)})

PS :如果您使用的是 Rxjs v4 或更低版本,我认为 OP 提出的答案是最佳答案,因为它使用专门用于此目的的运算符。如果您使用的是 RxJS v5,目前处于测试阶段,我在发行版中找不到运算符 generateWithRelativeTime,因此您可以求助于此处提到的答案。

我完成了以下解决方案:

    rx.Observable.generateWithRelativeTime(
        1,
        function (x) { return true; },
        function (x) { return x + 1; },
        function (x) { return x; },
        function (x) { return math.randomInt(100,500); }
    ).timeInterval()
    .do(console.log).subscribe();