如何在等待用户命令行输入时暂停while循环?
解决方案
你的代码存在两个核心问题:
readline.question是异步回调API,同步运行的while循环不会等待回调返回就会直接执行下一轮,会出现无限重复输出提问、无法接收输入的问题- 回调中拿到的输入是字符串类型,直接和数字-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
相关产品推荐
相关产品推荐

