为nodeJS中的每一行文件顺序执行函数

Execute function sequentially for each line of file in 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 侦听器时,您正在侦听发出的事件

The 'line' event is emitted whenever the input stream receives an end-of-line input (\n, \r, or \r\n). This usually occurs when the user presses Enter or Return.

The listener function is called with a string containing the single line of received input.

由于它是一个侦听器,因此您无法控制事件的发出方式。

line.pause() 在这里也不起作用,因为以下原因

Calling rl.pause() does not immediately pause other events (including 'line') from being emitted by the readline.Interface instance.

如果你愿意,你应该将整个文件读入一个 javascript 数组,然后使用 for loops 遍历每一行。

node.js: read a text file into an array. (Each line an item in the array.)