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

Inquirer调用prompt后不等待用户输入问题的排查与修复

问题原因与解决方案

问题原因

  • 异步代码执行顺序错误:inquirer.prompt()是异步操作,会被放入Node.js的事件队列等待执行,而你写在它后面的二维码生成、文件写入代码是同步执行的,这些代码会在用户完成输入之前就运行,导致程序看起来没等待输入就跳转。
  • 变量未正确赋值:link变量初始值为undefined,且你没有在用户输入完成后将值赋给它,后续代码直接使用这个未定义的变量,不仅逻辑错误,还会导致程序提前执行后续操作。

解决方法

将所有依赖用户输入的逻辑(处理输入内容、生成二维码、写入文件)全部放入inquirer.prompt()的.then()回调函数中,确保这些代码只在用户完成输入后才执行。同时,ES模块的import语句必须放在文件顶部,不能穿插在代码中间。

修正后的代码:

import inquirer from 'inquirer';
import qr from 'qr-image';
import fs from 'fs';

inquirer
  .prompt([
    { message: "add link", name: "URL" }
  ])
  .then((answers) => {
    const link = answers.URL;
    console.log(link);
    // 生成二维码并输出到文件
    var qr_svg = qr.image(link, { type: 'svg' });
    qr_svg.pipe(fs.createWriteStream('qr_code.svg'));
    // 写入用户输入到文件
    fs.writeFile('user_input.txt', link, (err) => {
      if (err) throw err;
      console.log('用户输入已保存到user_input.txt');
    });
  })
  .catch((error) => {
    if (error.isTtyError) {
      console.log('当前环境无法渲染输入提示');
    } else {
      console.log('程序出错:', error);
    }
  });

可选写法(async/await风格)

如果习惯更直观的同步式写法,可以用async/await重构代码:

import inquirer from 'inquirer';
import qr from 'qr-image';
import fs from 'fs';

async function main() {
  try {
    const answers = await inquirer.prompt([
      { message: "add link", name: "URL" }
    ]);
    const link = answers.URL;
    console.log(link);
    var qr_svg = qr.image(link, { type: 'svg' });
    qr_svg.pipe(fs.createWriteStream('qr_code.svg'));
    fs.writeFile('user_input.txt', link, (err) => {
      if (err) throw err;
      console.log('用户输入已保存');
    });
  } catch (error) {
    if (error.isTtyError) {
      console.log('当前环境无法渲染输入提示');
    } else {
      console.log('程序出错:', error);
    }
  }
}

main();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:17:47