我想阅读大量的二进制数据流,将其分成更小的部分并执行PUT。
data.pipe(new BlockStream(1024*1024)).pipe(through(success, end))
function success(data) {
var params = {/*host, port, etc...*/
var req = http.request(params, (e, r) => {/*handle response*/})
req.push(data)
req.end()
}
function end() {cb()}
理想情况下,我希望在移动到下一个请求之前完成请求,同时不阻止执行其他JS代码。有人能够指出我正确的方向吗?
答案 0 :(得分:1)
看起来你正在使用through。您可以使用pause
和resume
方法来控制数据流:
var inProgress = 0;
var MAX_IN_PROGRESS = 5; //or whatever number
data.pipe(new BlockStream(1024*1024)).pipe(through(success, end))
function success(data) {
var params = {/*host, port, etc...*/
inProgress++;
if(inProgress == MAX_IN_PROGRESS) {
this.pause();
}
var that = this;
var req = http.request(params, (e, r) => {/*handle response*/})
req.push(data)
req.end(function() {
inProgress--;
if(that.paused) {
that.resume();
}
});
}
function end() {cb()}
我们在这里做的是记录当前正在进行的请求数量。当我们开始一个时,我们会暂停,如果这会让我们达到最大数字,当我们完成一个时,如果我们当前暂停,我们会恢复。