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(...)