You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 14:36:03