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

使用Node.js的qrcode包生成二维码,存变量后打印显示undefined求助

问题原因

这是异步代码执行顺序导致的:

  • QRCode.toDataURL()是异步操作,会在后台运行,不会卡住后续代码的执行。
  • 你写的console.log(qrcode)是同步代码,会在异步操作完成、then回调执行前就运行,这时候qrcode还没被赋值,自然输出undefined。
  • 而then回调是等异步操作完成后才触发的,这时候二维码地址已经生成,所以能正常打印。
解决方案

有几种实用的解决办法:

方法一:把逻辑放进then回调里

直接把需要用到二维码地址的代码放在then回调内,确保数据准备好后再执行:

import QRCode from "qrcode";

QRCode.toDataURL("I am a pony!")
  .then((url) => {
    console.log(url); // 在这里直接使用或打印地址
  })
  .catch((err) => {
    console.error(err);
  });

方法二:用async/await语法(更简洁直观)

用async函数包裹代码,通过await等待异步操作完成,让代码逻辑看起来像同步执行:

import QRCode from "qrcode";

async function generateQR() {
  try {
    const qrcode = await QRCode.toDataURL("I am a pony!");
    console.log(qrcode); // 等异步操作完成后再打印
  } catch (err) {
    console.error(err);
  }
}

generateQR();

方法三:Promise链式调用(适配复杂流程)

如果后续还有其他异步操作,可以通过链式调用保证执行顺序:

import QRCode from "qrcode";

QRCode.toDataURL("I am a pony!")
  .then((url) => {
    return url; // 把地址传递到下一个回调
  })
  .then((qrcode) => {
    console.log(qrcode);
    // 这里可以继续写需要用到qrcode的逻辑
  })
  .catch((err) => {
    console.error(err);
  });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:29:58