Rx.Observable.interval,每个事件具有不同的间隔

Rx.Observable.interval with different interval for each event

本文关键字:事件 interval Observable Rx      更新时间:2023-09-26

我有一堆事件,每个事件都必须在前一个事件之后触发,并具有特定于此事件的延迟。

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

通过根据需要调整时间选择器,您可以改变值之间的间隔。