Node.js使用inquirer循环时程序不等待用户输入的问题如何解决
问题原因
inquirer.prompt() 属于异步方法,执行后会返回Promise对象,你使用的同步do...while循环不会等待异步操作结束,就会立刻执行下一轮循环,所以程序会不断触发提问,不会等待用户输入。
修复代码
你可以把循环逻辑封装在async函数中,配合await等待每一轮用户输入完成后再进入下一轮循环,修改后的代码如下:
const inquirer = require('inquirer'); const questions = [{ type: 'input', name: 'name', message: "What's your name" }]; async function startLoop() { // 无限循环,每次等待用户输入完成再执行下一轮 while (true) { const answers = await inquirer.prompt(questions); console.log(`Hi, ${answers['name']}`); } } startLoop();
如果需要支持用户主动退出程序,可以加判断逻辑,示例如下:
async function startLoop() { while (true) { const answers = await inquirer.prompt(questions); // 输入exit时退出循环 if (answers.name.trim().toLowerCase() === 'exit') { console.log('程序结束'); break; } console.log(`Hi, ${answers['name']}`); } }
内容的提问来源于stack exchange,提问作者Yosef Satrio Aji
相关产品推荐
相关产品推荐

