Node.js使用readline获取控制台输入后再执行代码问题求助
问题根源
- Node.js 内置的
readline.question是异步回调API,不会阻塞同步代码执行,你实现的同步sleep函数只会阻塞主线程,甚至会卡住回调函数的执行,无法实现等待用户输入的效果 - 你代码中回调函数的参数
ans和外层全局变量ans重名,存在作用域冲突,就算回调触发也无法正确拿到用户输入赋值给外层变量
修复方案
将readline.question封装为返回Promise的方法,配合async/await实现同步等待用户输入的效果,最终实现和你给出的Python代码完全一致的逻辑,完整代码如下:
const readline = require("readline").createInterface({ input: process.stdin, output: process.stdout, }); // 封装question为支持await的异步方法 function question(prompt) { return new Promise((resolve) => { readline.question(prompt, resolve); }); } async function runMathQuiz() { while (true) { const num1 = Math.floor(Math.random() * 10); const num2 = Math.floor(Math.random() * 10); const correctAns = num1 + num2; // 等待用户输入完成再往下执行 const userInput = await question(`What is ${num1} + ${num2}? >> `); if (parseInt(userInput) === correctAns) { console.log("Correct!"); } else { console.log("Wrong!"); console.log(`Answer: ${correctAns}`); } } } runMathQuiz();
内容的提问来源于stack exchange,提问作者donutgoose
相关产品推荐
相关产品推荐

