NodeJS无限运行终端应用程序,从终端读取

时间:2018-06-17 11:22:32

标签: javascript node.js

我正在尝试创建一个无限期运行的终端应用程序,并且能够从终端读取。

我尝试使用" readline" api但应用程序终止而不等待任何输入。

我添加了一个" while(true)"循环,但似乎线程在循环中堆叠,并且不响应我的输入。

我需要一系列随机数字 为了帮助我,我添加了一个1000毫秒的间隔,结果与while循环相同。

总结我需要创建一个从终端读取的应用程序,并在给定的时间间隔内创建随机数。

任何指导都将不胜感激。

编辑1
我刚才想给你的其他信息。

我试图将readline调用或间隔放在一个单独的分叉进程中,但没有任何改变。

我也尝试使用recursion作为readline。

编辑2
虽然我接受了@ amangpt777的回答,但我想提出另一个你可能会遇到的问题。

我这样调用我的脚本'清除| node ./script.js'在windows` powershell。

我相信这是阻碍我输入的管道。

我不知道这是否会在linux上发生,我还没有对它进行过测试。

我只是在这里添加它,以便记住它。

1 个答案:

答案 0 :(得分:2)

我不确定你在这里想要完成什么。但是下面的代码将使用readline从用户那里获取输入,并将继续将输入存储在数组中。请注意,我在此处有一些注释代码,如果您需要发布订阅者模型,可以取消注释。此外,您还需要添加更多代码来清理和验证您的输入。我希望你能得到一些指导来实现你想要的东西:

var readline = require('readline');
//var redis = require('redis');
//let subscriber = redis.createClient();
//let publisher = redis.createClient();
let numEntered = [];

var r1 = readline.createInterface(
   {
      "input": process.stdin,
      "output": process.stdout
   }
);

// subscriber.subscribe('myFunc');
// subscriber.on('message', (channel, msg) => {
//    //Your logic
// });

function printMyArr(){
   console.log("Numbers entered till now: ", numEntered);
}

function askNumber(){
   askQuestion('Next Number?\n')
   .then(ans => {
      handleAnswer(ans);
   })
   .catch(err => {
      console.log(err);
   })
}

function handleAnswer(inputNumber) {
   if(inputNumber === 'e') {
      console.log('Exiting!');
      r1.close();
      process.exit();
   }
   else {
      numEntered.push(parseInt(inputNumber));
      //publisher.publish('myFunc', parseInt(inputNumber));
      //   OR
      printMyArr();
      askNumber();
   }
}

function askQuestion(q) {
   return new Promise((resolve, reject) => {
      r1.question(q, (ans) => {
         return resolve(ans);
      });
   });
}

function init() {
   askQuestion('Enter Stream. Press e and enter to end input stream!\n')
   .then(ans => {
      handleAnswer(ans);
   })
   .catch(err => {
      console.log(err);
   })
}

init();