我正处于Node.js和JavaScript的入门级,我想逐行读取txt文件,并按照调整的时间间隔打印每一行,我发现这个模块帮助我读取了行#34 ; https://nodejs.org/api/readline.html" 。 但我的代码一次发布所有行,我想在行之间等待几秒钟 我添加了setTimeout函数并尝试了很多没有vail的配置。谢谢
const readline = require('readline');
const fs = require('fs');
const rl = readline.createInterface({
input: fs.createReadStream(process.cwd() +'/sample.txt')
});
rl.on('line', function(input){
rl.pause();
console.log(input);
setTimeout(() => {
rl.resume();
}, 5000);
答案 0 :(得分:0)
此解决方案使用队列。每次读取一行时,它都会被添加到一个队列中,该队列每5秒就会消耗一行。
const readline = require('readline');
const fs = require('fs');
const rl = readline.createInterface({
input: fs.createReadStream(process.cwd() + '/sample.txt')
});
var queue = [];
setInterval(function () {
if (queue.length > 0) {
var item == queue.shift();
console.log(item);
}
}, 5000);
rl.on('line', function(input) {
queue.push(input);
});
如果您的队列变得非常大,您可以暂停,并在长度较低时再次恢复。
答案 1 :(得分:0)
使用同步执行程序nsynjs可以轻松完成此操作:
var nsynjs = require('nsynjs');
// following 2 files can be found in nsynjs package
var textFile = require('./wrappers/nodeReadline').textFile;
var wait = require('./wrappers/nsynWait').nsynWait;
function process(textFile,wait) {
var fh = new textFile();
fh.open('../data/lorem.txt');
var s, i = 0;
while (typeof(s = fh.readLine(nsynjsCtx).data) != 'undefined')
{
if(s)
console.log(s);
else
console.log("<empty line>");
wait(nsynjsCtx,1000);
}
fh.close();
}
var ctx = nsynjs.run(process,{},textFile,wait,function () {
console.log('done');
});
可以在此处找到完整的工作示例:https://github.com/amaksr/nsynjs/blob/master/examples/node-readline/index.js