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



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

我尝试使用"readline"api,但应用程序在没有等待任何输入的情况下终止。

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

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

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

任何指导将不胜感激。

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

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

我也尝试对阅读行使用递归。

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

我在Windows的Powershell上像这样称呼我的脚本"clear | node ./script.js"。

我相信是管道阻止了我的输入。

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

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

我不确定你在这里要完成什么。但是下面的代码将使用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();

最新更新