node.js如何使用背压处理快速生产者和慢速消费者

node.js如何使用背压处理快速生产者和慢速消费者,node.js,node-streams,backpressure,Node.js,Node Streams,Backpressure,我是node.js的新手,不了解有关流的文档。希望得到一些提示 我正在读取一个非常大的文件行,然后为每一行调用一个异步网络api 显然,本地文件的读取速度远远快于异步调用的完成速度: var lineReader = require('readline').createInterface({ input: require('fs').createReadStream(program.input) }); lineReader.on('line', function (line) {

我是node.js的新手,不了解有关流的文档。希望得到一些提示

我正在读取一个非常大的文件行,然后为每一行调用一个异步网络api

显然,本地文件的读取速度远远快于异步调用的完成速度:

var lineReader = require('readline').createInterface({
  input: require('fs').createReadStream(program.input)
});

lineReader.on('line', function (line) {
    client.execute(query, [line], function(err, result) {
        // needs to pressure the line reader here
        var myJSON = JSON.stringify(result);
        console.log("line=%s json=%s",myJSON);
    });
});

在“执行”方法中添加背压的方法是什么?

解决方案是将异步行为包装到流写入器中,并从写入器中限制异步读取器:

val count = 0;
var writable = new stream.Writable({
    write: function (line, encoding, next) {
        count++;
        if (count < concurrent) {
            next();
        }

        asyncFunctionToCall(...) {
            // completion callback
            // reduce the count and release back pressure
            count--;
            next();
            ...
      }
});

var stream = fs.createReadStream(program.input, {encoding: 'utf8'});
stream = byline.createStream(stream);
stream.pipe(writable);
val计数=0;
var writeable=新流。可写({
写入:函数(行、编码、下一步){
计数++;
如果(计数<并发){
next();
}
异步函数调用(…){
//完成回调
//减少计数并释放背压
计数--;
next();
...
}
});
var stream=fs.createReadStream(program.input,{encoding:'utf8'});
stream=byline.createStream(stream);
stream.pipe(可写);

你能简单地解释一下你的问题吗?你如何在这个异步调用上创建一个流呢?OK,所以你应该使用promise或async Wait来解决这个问题,同步读取或推送数组中的数据,然后同步执行数组。我想我需要创建一个流。Writable nodejs文档中有一个关于嘿,这是如何限制读卡器的?是否有一个
返回false;
缺失,或者它应该是这样的?