簡體   English   中英

發出一個對象作為可觀察計時器的值

[英]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
}

jsbin示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM