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

如何阻止Node.js应用处理完成后退出,实现Inquirer循环询问用户

Node.js inquirer 循环发起提问实现方案

你之前的实现失效是因为run()是异步函数,同步的死循环不会等待异步任务执行完成,就会连续发起多次提问,导致控制台刷屏。

方案1:带await的死循环实现(更直观)

直接用while(true)循环,每次循环都等待run()执行完成后再进入下一轮:

// 替换原有代码末尾的 run(); 即可
const loopRun = async () => {
  while (true) {
    // 等待当前轮次的提问、处理逻辑全部执行完成
    await run();
  }
}

// 加上错误捕获,避免运行报错直接退出
loopRun().catch(err => {
  console.error('运行出错:', err);
  process.exit(1);
});

方案2:递归链式调用实现

如果不想写循环,也可以在run()执行完成后递归触发下一次执行:

// 替换原有代码末尾的 run(); 即可
const start = () => {
  run()
    .then(start) // 本轮执行完成后触发下一轮
    .catch(err => {
      console.error('运行出错:', err);
      process.exit(1);
    })
}
start();

可选扩展:增加手动退出选项

如果不想仅靠强制终止进程退出,可以在form()的提问逻辑中增加退出选项,用户选择退出时直接终止进程即可:

// 示例:在inquirer的提问列表中新增退出选项
const form = async () => {
  return inquirer.prompt([
    // 你原有其他提问
    {
      type: 'confirm',
      name: 'exit',
      message: '是否退出程序?',
      default: false
    }
  ])
}

// 然后在run()中增加判断逻辑
const run = async function() {
  const answers = await form();
  if (answers.exit) {
    console.log('程序退出');
    process.exit(0);
  }
  // 原有其他处理逻辑
  // ~~
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:06:06