为什么只有一个 Node readline 对象有效?
Why does only one Node readline object work?
在下面的 node.js 示例中,我想向用户询问两个数字,然后 return 将总和返回到控制台。我已经使用 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();
});
如果你想等第一个问题得到回答,你需要在答案返回后再问第二个,像这样:
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 机制中进行。
你会掌握窍门的。
可能是竞争条件? 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();
});
});
在下面的 node.js 示例中,我想向用户询问两个数字,然后 return 将总和返回到控制台。我已经使用 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();
});
如果你想等第一个问题得到回答,你需要在答案返回后再问第二个,像这样:
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 机制中进行。
你会掌握窍门的。
可能是竞争条件? 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();
});
});