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

Uncaught ReferenceError: async未定义问题排查及async函数正确使用咨询

问题排查与解决方案:Uncaught ReferenceError: async is not defined

咱们一步步拆解你的问题并解决:

错误根源分析

你遇到的Uncaught ReferenceError: async is not defined错误,核心问题出在动态生成捐赠按钮的onclick属性赋值上:

你原本的代码里写了:

document.getElementById("popcorn").innerHTML = `
  <p>钱包地址: ${user.get('ethAddress')}</p>
  <p><button id="donate_btn" onclick=${donate}>捐赠</button></p>
`;

这里用${donate}会把整个donate函数的源码(包括开头的async关键字)转换成字符串,插入到onclick属性中。浏览器解析时,会把这段字符串当成普通JS代码执行,自然会把async当成未定义的变量,从而抛出错误。

正确的写法应该是直接指定函数调用:onclick="donate()",这样浏览器才会正确调用你定义好的donate函数。

修复后的完整代码

下面是修正后的代码,重点修改了login函数里的按钮生成部分:

async function donate() { 
  let options = { 
    contractAddress: "0x..", 
    functionName: "newDonation", 
    abi: [{ .... }], 
    params: { note: "来自Popcorn先生的感谢!" }, 
    msgValue: Moralis.Units.ETH(0.2) 
  } 
  await Moralis.executionFunction(options); 
} 

async function login() { 
  let user = Moralis.User.current() 
  if (!user) { 
    try { 
      user = await Moralis.authenticate({ 
        signingMessage: ` 登录到Popcorn!请确保您已了解相关条款。 ` 
      }) 
      await Moralis.enableWeb3() 
      console.log(user.get('ethAddress')) 
      document.getElementById("popcorn").innerHTML = ` 
        <p>钱包地址: ${user.get('ethAddress')}</p> 
        <p><button id="donate_btn" onclick="donate()">捐赠</button></p> 
      `; 
    } catch (error) { 
      console.log(error) 
    } 
  } 
} 

async function logOut() { 
  await Moralis.User.logOut() 
  console.log("已登出!") 
} 

document.getElementById("login_btn").onclick = login; 
document.getElementById("logout_btn").onclick = logOut;

关于async的重要澄清

你之前误以为async是第三方依赖,尝试安装async包、用require引入,这是完全没必要的:

  • async是JavaScript ES6原生的关键字,专门用来定义异步函数,不需要额外安装任何包,也不需要通过require或import引入。
  • 第三方的async包是一个工具库,用来处理异步流程(比如async.series、async.parallel),和原生的async关键字完全是两回事,你的代码里根本用不上它。

这样修改后,点击捐赠按钮就不会再抛出错误,能正常调用donate异步函数了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 00:24:05