javascript - 控制不会停止接受输入,而是在无限循环中运行
问题描述
在下面的程序中,我创建了两个文件,一个用于导出模块,另一个文件在开关盒中使用此模块,我的目标是使用开关盒制作一个基本的计算器程序,允许用户提供超过曾经,为了做到这一点,我使用了无限循环,但问题出在 prompt.get() 行,就在 while(1) 程序控制没有停止从用户那里获取输入之后,它一直在无限循环中进行. 为了特别指出那条线,我对它发表了评论。
数学.js
module.exports={
add:function(a,b)
{
return a+b;
},
sub: (a,b)=> a-b,
divide: (a,b) => a/b,
multiply: (a,b) => a*b
}
'another js file.'
const math=require('./math');
const prompt=require('prompt');
prompt.start();
console.log("\n1.Add\n2.Substract\n3.Divide\n4.Multiply\n5.Exit\nEnter your choice (1-5):\n");
while(1)
{
//here control of program is not stopping to take input and it continuously going on in a infinite loop
prompt.get([{
name: 'firstNumber',
type: 'number'
},{
name: 'secondNumber',
type: 'number'
}],function(err,result){
if(err) {onErr(err);}
prompt.get({
name:'choice',
type: 'number'
},function(err,result){
if(err){ onErr(err)}
switch(result.choice)
{
case 1:
console.log("sum is "+math.add(result.firstNumber,result.secondNumber));
break;
case 2:
console.log(`Substraction is ${math.sub(result.firstNumber,result.secondNumber)}`);
break;
case 3:
console.log(`Division is ${math.divide(result.firstNumber,result.secondNumber)}`);
break;
case 4:
console.log(`multiplication is ${math.multiply(result.firstNumber,result.secondNumber)}`)
break;
case 5: process.exit(0);
default: console.log("You had entered invalid choice.");
break;
}
})
});
}
function onErr(err)
{
console.log(err);
return 1;
}
解决方案
While 循环进入无限循环,因为传入的值始终为真。根据您的要求,我建议使用递归。我在下面粘贴工作代码。让我知道它是否有效。
const math = require('./math');
const prompt = require('prompt');
prompt.start();
console.log("\n1.Add\n2.Substract\n3.Divide\n4.Multiply\n5.Exit\nEnter your choice (1-5):\n");
takeInputs()
function takeInputs () {
prompt.get([{
name: 'firstNumber',
type: 'number'
}, {
name: 'secondNumber',
type: 'number'
}], function (err, result) {
if (err) { onErr(err); }
prompt.get({
name: 'choice',
type: 'number'
}, function (err, data) {
if (err) { onErr(err) }
switch (data.choice) {
case 1:
console.log("sum is " + math.add(result.firstNumber, result.secondNumber));
return takeInputs()
case 2:
console.log(`Substraction is ${math.sub(result.firstNumber, result.secondNumber)}`);
return takeInputs()
case 3:
console.log(`Division is ${math.divide(result.firstNumber, result.secondNumber)}`);
return takeInputs()
case 4:
console.log(`multiplication is ${math.multiply(result.firstNumber, result.secondNumber)}`)
return takeInputs()
case 5: process.exit(0);
default: console.log("You had entered invalid choice.");
return takeInputs()
}
})
});
}
function onErr (err) {
console.log(err);
return 1
}
推荐阅读
- javascript - 如何在 ReactJS 中的页面加载时加载组件?
- makefile - 如何删除makefile中的扩展名
- python - python中的特殊字符处理(连字符(-))
- perl - 如何将参数转发给perl中的超级函数?
- python - 生成具有预定义均值、标准、最小值和最大值的随机数
- angular - Angular 6 单元测试:我想为我的测试存根声明的属性
- python - Python将元组转换为值
- c# - 获取 Regex.Matches 在位置 0 开始匹配
- docker - 什么是 docker 子镜像
- java - 我想使用 JDBI 以 1000 的块插入 11000 条记录,这样所有记录都应该持续存在或根本不存在。它目前给出的错误如下