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();
我需要一种方法来创建 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();