使用 Bacon.JS 进行速率限制
Rate limiting with Bacon.JS
我正在尝试在访问外部 API 时创建速率限制,使用 Bacon.JS
速率限制工作正常,使用 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()
我正在尝试在访问外部 API 时创建速率限制,使用 Bacon.JS
速率限制工作正常,使用 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()