【发布时间】:2016-06-18 05:48:00
【问题描述】:
我需要重播存储在数据库中的一系列事件。所以我想创建一个 Observable 计时器流,当每个事件必须发出时,该计时器就会消失。我的问题是我找不到合适的方法来将对象作为计时器的值发出。
让我设置一个简化的(并且有些人为的)示例,但这可以解释问题。
让我们从一个简单的延迟值数组开始
var delays = [200,100,1000,1200,300,1100];
及其对应的 Observable 计时器
var source= Rx.Observable
.for(delays, t => Rx.Observable.timer(t) );
我可以观察到的
source.subscribe( x => console.log(x) );
到目前为止一切顺利,在每次计时器完成时仅获得一个零列表。
然后,出于本示例的目的,我想获取在表示的延迟时触发的事件,而不是按原始顺序;我想获取每个计时器数组的原始值和索引。
所以,我在 observable 中添加了一个简单的地图
var source= Rx.Observable
.for(delays, t => Rx.Observable.timer(t) )
.map((x,i)=>{i,x});
并且,为了检查时间是否准确,我在观察者中添加了一个手表,
var startTime = Date.now();
source.subscribe( x => console.log((Date.now()-startTime), x) );
这是我想要得到的
142 { i:1, x:100 } 204 { i: 0, x: 200 } 303 { i: 4, x: 300 } 1002 { i: 2, x: 1000 } 1101 { i: 5, x: 1100 } 1203 { i: 3, x: 1200 }
我没有得到数组中的原始索引,而是它们被发出的顺序。
这是我得到的,而不是
1046 { x: 0, i: 0 } 1166 { x: 0, i: 1 } 1371 { x: 0, i: 2 } 2472 { x: 0, i: 3 } 3673 { x: 0, i: 4 } 3974 { x: 0, i: 5 }
让一个对象作为计时器的值发出的最 RxJS 风格的技术是什么?
【问题讨论】:
标签: javascript rxjs