javascript - nodeJS 等待无法 promise 的事件

标签 javascript node.js asynchronous nonblocking

我正在尝试从我的nodejs文件中读取STDIN PIPE,并向URL发出POST请求,其中每一行都由STDIN给出,然后等待响应,读取下一行,发送,等待等等

'use strict';
const http = require('http');
const rl = require('readline').createInterface(process.stdin,null);
rl.on('line', function (line) {
     makeRequest(line); // I need to wait calling the next callback untill the previous finishes
}).on('close',function(){
    process.exit(0);
});

问题是,rl.on('line') 将立即从我的管道中读取数千行,并立即启动数千个请求,这将导致 EMFILE 异常。我知道这是非阻塞 IO 的预期行为,但在这种情况下,不能使用 Promise/Futures,因为 .on('line') 本身就是一个回调,我无法在不丢失输入数据的情况下操纵它不触发。 那么,如果无法使用回调并且超时黑客不够优雅,如何才能摆脱 nonblockIO 的诅咒呢?

最佳答案

保留事件请求的计数器(发送时递增,响应时递减)。一旦计数器超过常量(例如 200),(检查每个“行”事件)调用 rl.pause()。对于每个响应,检查计数器是否小于常量,如果是,则调用 rl.resume()。这应该会限制内存中的请求速率和当前行,并解决您的问题。

关于javascript - nodeJS 等待无法 promise 的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36000021/

相关文章:

javascript - iPhone 无法识别 PhoneGap 的 navigator.app

javascript - 使用 jquery 通过 ajax 加载内容

sql - 如何将 SQL 查询转换为 sequelize?

javascript - 无法在 Heroku 中仅通过 https 访问 http 上的 cookie

python - 如何将 Gevents 与 Falcon 一起使用?

JavaScript fetch API - 为什么 response.json() 返回一个 promise 对象(而不是 JSON)?

javascript - AddEventListener 仅使用 Javascript 不存在对象

javascript - ExtJs 表单字段如何工作

node.js - 尝试 NPM 发布以前未发布的版本时出错

javascript - 在异步/等待函数完成之前执行的代码?