2016-01-01 4 views
0

У меня есть сообщения с тостами, которые я хотел бы использовать. Я попытался использовать буфер, но затем я получаю кучу сообщений в массиве, когда мне действительно нравится, чтобы сообщения просто оставались в потоке, пока я не попрошу их. То, что я закончил, - это задержка моего потока сообщений с интервальным потокомДроссельный поток без буферизации

var messageStream = Rx.Observable.FromEvent(..., 'click'); 
var intervalStream = Rx.Observable.interval(5000); 
messageStream.Zip(intervalStream, (x,_)=>x).subscribe(showToast(x)); 

Есть ли более элегантный способ сделать это?

ответ

2

Посмотрите на controlled. Он позволяет вам ставить в очередь значения, ожидая вас до значений .request(x) x. Для использования с осторожностью, так как это означает, что память будет использоваться для буферизации значений, а память не бесконечна. Это также может быть хорошее чтение: backpressure

0

Вот подход с использованием буфера, а затем flatMap разматывать массив:

var messageStream = Rx.Observable.FromEvent(..., 'click'); 
var intervalStream = Rx.Observable.interval(5000); 
messageStream 
    .buffer(intervalStream) 
    .flatMap(function (x) { 
     return Rx.Observable.from(x) 
    }) 
    .subscribe(function (x) { 
     showToast(x) 
    }) 

Example here on jsfiddle.

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