javascript - 使用 Bacon.JS 进行速率限制

标签 javascript stream bacon.js

我正在尝试使用 Bacon.JS 访问外部 API 时创建速率限制

使用 bufferWithCount 和 bufferingThrottle 的速率限制工作正常,但我希望在所有内容都平面映射时获得结果,而不是一次每个批处理。

我尝试过 onEnd 但它似乎没有被触发。

这是一个 fiddle :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);
  }

最佳答案

您可以使用 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/

关于javascript - 使用 Bacon.JS 进行速率限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35839248/

相关文章:

java - 如果我间接声明文件,如何计算文件的字节大小(带有路径名的BufferedReader?)(Java 6)

rxjs - 在满足条件之前忽略流中的事件?

javascript - Bacon.js 控制流与其他流的缓冲

javascript - 如何将 bacon.js 中一个流的当前值与另一个流的每个值组合起来?

javascript - Facebook 照片缩放 : How was it done?

node.js - 在pdf中写入字节

javascript - Mootools提交表单仅在通过id选择表单时有效

java - 为什么我的对象流被损坏?流损坏异常

javascript - 发布/重定向/获取并向用户发出警报?

javascript - 仅在 bootstrap formhelpers 国家选择器中显示国家子集文本