我有一堆事件,每个事件都必须在前一个事件之后触发,并具有特定于该事件的延迟。
Rx.Observable.interval
提供了只提供一个区间的可能性。
有没有办法提供不同的间隔?
我有一堆事件,每个事件都必须在前一个事件之后触发,并具有特定于该事件的延迟。
Rx.Observable.interval
提供了只提供一个区间的可能性。
有没有办法提供不同的间隔?
解决方案是@NiklasFasching 提出的修改版本
Rx.Observable.from(events)
.concatMap(function(event) {
return Rx.Observable.timer(event.delay);
})
.subscribe(...)
有generateWithRelativeTime
运营商。官方文档在这里。简而言之,运算符允许您指定一个序列,您可以在发出每个值时对其进行调整。它类似于 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();
通过根据您的需要调整时间选择器,您可以使值之间的间隔发生变化。