2016-03-07 1 views
0

Я пытаюсь создать ограничение скорости при доступе к внешнему API, используя Bacon.JSОграничение скорости с Bacon.JS

ограничения скорости работает отлично, используя bufferWithCount и bufferingThrottle, но я хотел бы получить результаты когда все плоское, а не каждая партия за раз.

Я стараюсь, но он не срабатывает.

Вот скрипка: http://jsfiddle.net/9324jyLr/1/

var stream = new Bacon.Bus(); 

    stream 
    .bufferWithCount(2) 
    .bufferingThrottle(1000) 
    .flatMap(batch => { 
     batch = batch.map(x => x*2); //this should be an async API call returning Bacon.fromPromise(...) 
     return Bacon.fromArray(batch); 
    }) 
    // .bufferWithTime(1000)//one thang per interval 
    .onValue(val => $('#log').append(val)); 

    for (var i=0; i<10; i++) { 
    stream.push(i); 
    } 

ответ

1

Вы можете использовать fold объединить результаты и .end(), чтобы вызвать автобус до конца.

stream 
    .bufferWithCount(2) 
    .bufferingThrottle(1000) 
    .flatMap(batch => { 
     batch = batch.map(x => x*2); //this should be an async op 
     return Bacon.fromArray(batch); 
    }) 
    .fold([], (arr, val) => { return arr.concat(val) }) 
    // .bufferWithTime(1000)//one thang per interval 
    .onValue(val => $('#log').append(val+"\n")); 

    for (var i=0; i<10; i++) { 
    stream.push(i); 
    } 
    stream.end() 

http://jsfiddle.net/jdr9wuzy/