2017-01-12 6 views
0

Учитывая массив объектов, содержащих полезную нагрузку сообщений и параметр времени, как это:Производят поток значений с задержками, управляемые данными в RxJS

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

Я хотел бы создать наблюдаемую последовательность, которая возвращает часть сообщения каждого элемента массива и затем ожидает соответствующего количества времени, указанного в объекте. Я открыт для реорганизации структуры данных массива, если это необходимо.

Я видел Observable.delay, но не вижу, как это можно использовать с динамическим значением таким образом. Я работаю в RxJS 5.

+0

Ваш текст вопроса говорит сообщения должны быть возвращены, и он должен * тогда * ждать соответствующее количество времени, но сообщения в вашем коде предполагают, что ожидание должно произойти * до того, как это сообщение будет доставлено. Что он? И время от времени подписки или время, в которое было отправлено предыдущее сообщение? – cartant

+0

Извините за мою терминологию, я новичок в RxJS. Да, я имел в виду испуг. И я вижу замешательство в отношении параметров времени. Принятый ответ делает то, что я хочу в этом случае. –

ответ

1

Вы можете использовать delayWhen: (? Испускается)

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>

 Смежные вопросы

  • Нет связанных вопросов^_^