使用Bacon.JS限速

时间:2016-03-07 08:30:28

标签: javascript stream bacon.js

我正在尝试使用Bacon.JS

访问外部API时创建速率限制

速率限制工作正常,使用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 个答案:

答案 0 :(得分: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/