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

如何在等待用户命令行输入时暂停while循环?

解决方案

你的代码存在两个核心问题:

  1. readline.question是异步回调API,同步运行的while循环不会等待回调返回就会直接执行下一轮,会出现无限重复输出提问、无法接收输入的问题
  2. 回调中拿到的输入是字符串类型,直接和数字-1对比、直接累加都会出现类型错误

实现思路

将readline.question封装为返回Promise的方法,在async函数内使用while循环配合await等待用户输入,完全符合你必须使用while循环的练习要求。

可运行代码

var userInput = 0;
var sum = 0;
const readline = require("readline").createInterface({
  input: process.stdin,
  output: process.stdout,
});

// 封装question为支持await等待的异步方法
function questionAsync(prompt) {
  return new Promise(resolve => {
    readline.question(prompt, resolve);
  })
}

async function runLoop() {
  while (userInput !== -1) {
    const inputStr = await questionAsync(`请输入要累加的正整数,输入-1结束程序:\n`);
    // 输入转数字,处理非法输入场景
    userInput = Number(inputStr);
    if (isNaN(userInput)) {
      console.log('输入不合法,请输入数字');
      continue;
    }
    // 非终止值才累加
    if (userInput !== -1) {
      sum += userInput;
    }
  }
  // 循环结束输出结果、关闭实例
  console.log(`累计总和为:${sum}`);
  readline.close();
}

runLoop();

封装后的questionAsync可以通过await等待用户输入完成,才会执行while循环内后续的逻辑,完全满足每轮循环先等用户响应再往下走的需求。

内容的提问来源于stack exchange,提问作者user14849955

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:24:03