javascript - 对nodeJS中的每一行文件按顺序执行函数
问题描述
首先,我发现了类似的问题,但没有什么完全符合我的用例:
我有一个文件,例如:
line1prop1 line1prop2 line1prop3
line2prop1 line2prop2 line2prop3
line3prop1 line3prop2 line3prop3
...
我想逐行读取文件,为每一行执行一个函数但等待函数完成,然后再移动到下一行
这是因为对于每一行,我必须提取属性并向 Elasticsearch 发出请求,以查看我是否有匹配的文档,但我的集群被请求淹没,因为我目前异步读取所有内容。
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream('file.in')
});
lineReader.on('line', function (line) {
//EXECUTE FUNCTION HERE AND WAIT FOR IT TO FINISH
});
任何帮助是极大的赞赏!
解决方案
您需要了解当您使用.on
侦听器时,您正在侦听发出的事件
只要输入流接收到行尾输入(\n、\r 或 \r\n),就会发出 'line' 事件。这通常发生在用户按下 Enter 或 Return 时。
使用包含单行接收输入的字符串调用侦听器函数。
由于它是一个侦听器,因此您无法控制事件的发出方式。
由于以下原因,line.pause() 在这里也不起作用
调用 rl.pause() 不会立即暂停 readline.Interface 实例发出的其他事件(包括“line”)。
如果您愿意,您可能应该将整个文件读入一个 javascript 数组,并用于for loops
遍历每一行。
推荐阅读
- android - 为什么使用 NDK 不能存在不同的 stl 实现?
- swift - 如何在swift中制作带有背景颜色的交叉标签?
- sql - 有没有什么可能的方法可以只做大写的“元音”表单列名=“last_name”?
- python - 执行函数时无法从 AWS 层切换到指定本地构建的可编辑 pip3 包
- angular - 如何控制角垫图标的方向
- javascript - 访问整个输入类型日期值集
- java - 如何在 cassandra 中为 API 实现分页?
- react-native - 如何修复 React Native 中自定义标签栏的行为?
- python-asyncio - 使用 asyncio 完成多项终极工作
- amazon-web-services - 如何在没有任何代码的情况下将来自 websocket 的数据放到亚马逊 kinesis 数据流中(仅通过使用托管 aws 服务)?