2017-01-12 2 views
0

ein Array von Objekten gegeben, die eine Nachrichtennutzlast und Zeitparameter wie folgt enthalten:Produzieren eines Stroms von Werten mit datengesteuerten Verzögerungen in RxJS

var data = [ { message:"Deliver me after 1000ms", time:1000 }, { message:"Deliver me after 2000ms", time:2000 }, { message:"Deliver me after 3000ms", time:3000 } ];

Ich möchte einen beobachtbaren Sequenz erzeugen, die wieder der Nachrichtenteil jedes Elements des Arrays und wartet dann auf die entsprechende Menge an Zeit, die in dem Objekt spezifiziert ist. Ich bin offen für die Reorganisation der Datenstruktur des Arrays, wenn dies notwendig ist.

Ich habe Observable.delay gesehen aber kann nicht sehen, wie es mit einem dynamischen Wert auf diese Weise verwendet werden könnte. Ich bin in RxJS arbeiten 5.

+0

Ihre Frage Text sagt die Nachrichten sollten zurückgegeben werden und es sollte * dann * warten die entsprechende Zeit, aber die Nachrichten in Ihrem Code deuten darauf hin, dass gewartet werden soll * bevor * diese Nachricht zugestellt wird. Welches ist es? Und sind die Zeiten ab dem Zeitpunkt des Abonnements oder der Zeitpunkt, zu dem die vorherige Nachricht gesendet wurde? – cartant

+0

Entschuldigung meiner Terminologie, ich bin neu bei RxJS. Ja ich meinte emittiert. Und ich kann die Verwirrung über die Timing-Parameter sehen. Die angenommene Antwort macht in diesem Fall was ich will. –

Antwort

1

Sie delayWhen nutzen könnten: (emittiert)

var data = [ 
 
    { message:"Deliver me after 1000ms", time:1000 }, 
 
    { message:"Deliver me after 2000ms", time:2000 }, 
 
    { message:"Deliver me after 3000ms", time:3000 } 
 
]; 
 

 
Rx.Observable 
 
    .from(data) 
 
    .delayWhen(datum => Rx.Observable.timer(datum.time)) 
 
    .do(datum => console.log(datum.message)) 
 
    .subscribe();
<script src="https://unpkg.com/@reactivex/[email protected]/dist/global/Rx.js"></script>

Verwandte Themen