在nodejs中使用readline延迟

时间:2018-01-06 00:30:09

标签: javascript node.js

function  readFile(){  
  var lineReader = require('readline').createInterface({
    input: require('fs').createReadStream(FILE_PATH)
  });  
  lineReader.on('line', function (line) {
    setTimeout(() => {
      console.log("HEYYYYY");     
    }, 10000);    
  });
}

为什么这只会等待10秒钟一次,并且打印件嘿嘿' ?我想每10秒打印一次,但它不起作用。不知道为什么。

编辑:这将通过文件中的行数重复(查看听众'行')我需要在每行之间延迟10秒。

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,并通过https://nodejs.org/api/readline.html

中的“示例:逐行读取文件流”解决了该问题

在您的情况下,将是这样的:

const fs = require('fs');
    const readline = require('readline');

    async function processLineByLine() {
    const fileStream = fs.createReadStream(FILE_PATH);

    const rl = readline.createInterface({
      input: fileStream,
      crlfDelay: Infinity
    });
    // Note: we use the crlfDelay option to recognize all instances of CR LF
    // ('\r\n') in input.txt as a single line break.

    for await (const line of rl) {
      // Each line in input.txt will be successively available here as `line`.
      console.log(`Line from file: ${line}`);
      await sleep(10000)
    }
  }

  function sleep(ms){
        return new Promise(resolve=>{
            setTimeout(resolve,ms)
        })
    }

此示例将每10秒为您打印一行。

答案 1 :(得分:0)

它没有等待10秒钟。只是每条线读得如此之快,开始时间几乎没有区别。您可以在每个回调中添加一个将延迟增加10秒的变量,这样每行10秒就会打印一行。

function  readFile(){  

  var delay = 0;  

  var lineReader = require('readline').createInterface({
    input: require('fs').createReadStream(FILE_PATH)
  });  
  lineReader.on('line', function (line) {

    delay += 10000;    

    setTimeout(() => {
      console.log("HEYYYYY");     
    }, 10000+delay);    
  });
}