在下面的node.js示例中,我想向用户询问两个数字,然后将总和返还给控制台。我使用了readline.question()两次(每个数字一个),但只询问用户第二个数字。为什么第一个控制台提示没有出现?
const readline = require('readline');
let firstNumber = 0;
let secondNumber = 0;
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('Your first number: ', (answer) => {
firstNumber = parseInt(answer);
rl.close();
});
const r2 = readline.createInterface({
input: process.stdin,
output: process.stdout
});
r2.question('Your second number: ', (answer) => {
secondNumber = parseInt(answer);
console.log(`The sum of these numbers is: ${secondNumber + firstNumber}`);
r2.close();
});
答案 0 :(得分:3)
如果您想等待第一个问题得到解答,您需要在答案回来后询问第二个问题,如下所示:
const readline = require('readline');
let firstNumber = 0;
let secondNumber = 0;
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('Your first number: ', (answer) => {
firstNumber = parseInt(answer);
rl.question('Your second number: ', (answer) => {
secondNumber = parseInt(answer);
console.log(`The sum of these numbers is: ${secondNumber + firstNumber}`);
rl.close();
});
});
计划在javascript中花费时间的函数,并继续解释。
如果你想在其他东西之后发生某些事情,你需要在回调或promise.then机制中进行。
你会了解它。
答案 1 :(得分:1)
可能是竞争条件? question
似乎是一个异步函数,所以当第一个实例尝试写入输出流时,第二个实例暂停了它,这似乎是合理的。
你真的不需要两个实例,等待第一个问题的响应,然后在第一个问题的回调中提示第二个例子。
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('Your first number: ', ans1 => {
first = parseInt(ans1);
rl.question('Your second number: ', ans2 => {
second = parseInt(ans2);
console.log(`The sum of these numbers is: ${second + first}`);
rl.close();
});
});