我正在尝试逐行读取文件,执行一些具有回调的操作以及函数完成后恢复行读取.例如:
var fs = require('fs');
var readline = require('readline');
var stream = require('stream');
var instream = fs.createReadStream('./phrases.txt');
var outstream = new stream;
var rl = readline.createInterface(instream, outstream);
rl.on('line', function (line) {
rl.pause();
setTimeout(function () {
console.log('resuming');
rl.resume();
}, 2000);
});
Run Code Online (Sandbox Code Playgroud)
我的印象是上面的例子基本上应该读一行,等待2秒,console.log然后继续下一行.真正发生的是它等待前2秒,然后喷出很多console.log
Jav*_*ero 15
一行行模块可以帮助你阅读大的文本文件,一行行,没有文件缓存到内存中.
您可以异步处理这些行.这是提供的示例:
var LineByLineReader = require('line-by-line'),
lr = new LineByLineReader('big_file.txt');
lr.on('error', function (err) {
// 'err' contains error object
});
lr.on('line', function (line) {
// pause emitting of lines...
lr.pause();
// ...do your asynchronous line processing..
setTimeout(function () {
// ...and continue emitting lines.
lr.resume();
}, 100);
});
lr.on('end', function () {
// All lines are read, file is closed now.
});
Run Code Online (Sandbox Code Playgroud)
Jav*_*zán 15
无需安装任何外部库的解决方案。您只需要本机node.js“readline”模块。只需执行以下操作:
import fs from "fs";
import readline from "readline";
const readInterface = readline.createInterface({
input: fs.createReadStream(path.join(__dirname, 'myfile.txt'))
});
for await (const line of readInterface){
await someAsynchronousOperation();
}
Run Code Online (Sandbox Code Playgroud)
来源(官方文档):https ://nodejs.org/api/readline.html#rlsymbolasynciterator
存在一个非常好的线路阅读器模块, https://github.com/nickewing/line-reader
简单代码:
var lineReader = require('line-reader');
lineReader.eachLine('file.txt', function(line, last) {
// do whatever you want with line...
console.log(line);
if(last){
// or check if it's the last one
}
});
Run Code Online (Sandbox Code Playgroud)
还有“java 风格”的界面,用于更多控制:
lineReader.open('file.txt', function(reader) {
if (reader.hasNextLine()) {
reader.nextLine(function(line) {
console.log(line);
});
}
});
Run Code Online (Sandbox Code Playgroud)
另一个很酷的解决方案:
var fs = require('fs'),
sleep = require('sleep'),
readline = require('readline');
var rd = readline.createInterface({
input: fs.createReadStream('phrases.txt'),
output: process.stdout,
terminal: false
});
rd.on('line', function(line) {
console.log('-------')
console.log(line);
sleep.sleep(2)
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16135 次 |
| 最近记录: |