【问题标题】:stuck with node.js Readline module坚持使用 node.js Readline 模块
【发布时间】:2017-05-30 19:12:07
【问题描述】:

我是 Node.js 和 JavaScript 的入门级,我想逐行读取 txt 文件并以调整的时间间隔打印每一行,我发现这个模块可以帮助我读取行“@987654321 @”。 但是我的代码一次发布所有行,我想在行之间等待几秒钟 我添加了 setTimeout 函数并尝试了很多配置,但没有成功。谢谢

     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);

【问题讨论】:

  • 你能选择我的答案吗?我解决了你的问题。
  • 完成。再次感谢@arboreal84

标签: javascript node.js readline


【解决方案1】:

此解决方案使用队列。每次读取一行时,都会将其添加到队列中,该队列每 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);
});

如果您的队列变得非常大,您可以暂停,并在长度较短时再次恢复。

【讨论】:

    【解决方案2】:

    这可以通过同步执行器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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 2016-04-01
      • 2016-08-01
      • 1970-01-01
      相关资源
      最近更新 更多