为什么只有一个Node readline对象有效?

时间:2018-01-29 00:51:17

标签: javascript node.js readline

在下面的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();
});

2 个答案:

答案 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();
  });
});