Rx.Observable.interval 每个事件的间隔不同
Rx.Observable.interval with different interval for each event
我有一堆事件,每个事件都必须在前一个事件之后触发,并有特定于此事件的延迟。
Rx.Observable.interval
提供了只提供一个间隔的可能性。
有没有办法提供不同的时间间隔?
有generateWithRelativeTime
运算符。官方文档是here。简而言之,运算符允许您指定一个序列,您可以在其中调整发出每个值的时间。它类似于 for 循环,不同之处在于值是在您选择的时刻异步发出的。
例如同步for循环:
for (i=1;i<4; i++) {do something}
可以变成100ms、200ms、300ms间隔的值序列
// Generate a value with an absolute time with an offset of 100ms multipled by value
var source = Rx.Observable.generateWithRelativeTime(
1, // initial value
function (x) { return x < 4; }, // stop predicate
function (x) { return x + 1; }, // iterator
function (x) { return x; }, // value selector
function (x) { return 100 * x; } // time selector
).timeInterval();
通过根据您的需要调整时间选择器,您可以改变值之间的间隔。
解决方案是@NiklasFasching 提出的修改版本
Rx.Observable.from(events)
.concatMap(function(event) {
return Rx.Observable.timer(event.delay);
})
.subscribe(...)
我有一堆事件,每个事件都必须在前一个事件之后触发,并有特定于此事件的延迟。
Rx.Observable.interval
提供了只提供一个间隔的可能性。
有没有办法提供不同的时间间隔?
有generateWithRelativeTime
运算符。官方文档是here。简而言之,运算符允许您指定一个序列,您可以在其中调整发出每个值的时间。它类似于 for 循环,不同之处在于值是在您选择的时刻异步发出的。
例如同步for循环:
for (i=1;i<4; i++) {do something}
可以变成100ms、200ms、300ms间隔的值序列
// Generate a value with an absolute time with an offset of 100ms multipled by value
var source = Rx.Observable.generateWithRelativeTime(
1, // initial value
function (x) { return x < 4; }, // stop predicate
function (x) { return x + 1; }, // iterator
function (x) { return x; }, // value selector
function (x) { return 100 * x; } // time selector
).timeInterval();
通过根据您的需要调整时间选择器,您可以改变值之间的间隔。
解决方案是@NiklasFasching 提出的修改版本
Rx.Observable.from(events)
.concatMap(function(event) {
return Rx.Observable.timer(event.delay);
})
.subscribe(...)