[英]emit an object as the value of an observable timer
我需要重播存儲在數據庫中的一系列事件。 所以,我想創建之前可能重合時,每一個事件必須發射可觀察到的定時器可觀察到的數據流。 我的問題是我找不到使對象作為計時器的值發出的合適方法。
讓我設置一個簡化的(有些人為的)示例,但這可以解釋問題。
讓我們從一個簡單的延遲值數組開始
var delays = [200,100,1000,1200,300,1100];
及其相應的可觀察計時器
var source= Rx.Observable
.for(delays, t => Rx.Observable.timer(t) );
我可以觀察到
source.subscribe( x => console.log(x) );
到目前為止,到目前為止,在每個計時器完成時僅獲得零列表。
然后,在這個例子中的效果影響不大,我想獲得的延遲觸發的事件表達,而不是在原來的命令; 並且我想獲取原始值並在每個計時器的數組中建立索引。
所以,我在觀察到添加一個簡單的地圖
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式的技術?
你可以只flatMap
從數組計時器可觀察並map
到計時器的時間和指數。
const o = Rx.Observable;
const delays = [200,100,1000,1200,300,1100];
const delays$ = o.from(delays)
.flatMap( (t, i) => o.timer(t).map({t,i}));
delays$.subscribe(x => console.log(x));
會發出
[object Object] {
i: 1,
t: 100
}
[object Object] {
i: 0,
t: 200
}
[object Object] {
i: 4,
t: 300
}
[object Object] {
i: 2,
t: 1000
}
[object Object] {
i: 5,
t: 1100
}
[object Object] {
i: 3,
t: 1200
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.