我正在尝试创建一个无限期运行的终端应用程序,并且能够从终端读取。
我尝试使用" readline" api但应用程序终止而不等待任何输入。
我添加了一个" while(true)"循环,但似乎线程在循环中堆叠,并且不响应我的输入。
我需要一系列随机数字 为了帮助我,我添加了一个1000毫秒的间隔,结果与while循环相同。
总结我需要创建一个从终端读取的应用程序,并在给定的时间间隔内创建随机数。
任何指导都将不胜感激。
编辑1
我刚才想给你的其他信息。
我试图将readline调用或间隔放在一个单独的分叉进程中,但没有任何改变。
我也尝试使用recursion作为readline。
编辑2
虽然我接受了@ amangpt777的回答,但我想提出另一个你可能会遇到的问题。
我这样调用我的脚本'清除| node ./script.js'在windows` powershell。
我相信这是阻碍我输入的管道。
我不知道这是否会在linux上发生,我还没有对它进行过测试。
我只是在这里添加它,以便记住它。
答案 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();