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

React Dapp调用ERC721合约mint方法,Metamask签名交易后后续代码不执行

问题核心原因

你遇到的await后续代码不执行问题,主要是两类原因导致:一是send方法执行过程中抛出异常但未被捕获,代码直接中断运行;二是web3的send方法默认等待链上区块确认的逻辑卡住,始终没有触发resolve。

具体解决方案

  • 补充异常捕获逻辑
    你当前的async方法没有做错误捕获,只要send过程中出现任何异常(比如用户拒绝签名、链上执行revert、网络连接中断等),代码会直接跳出当前函数,不会执行后续的console.log。
    修改mint函数加上try/catch即可查看具体错误:
mint = async (addressTo, count) => {
  try {
    console.log('Address to which NFT will be minted :', addressTo);
    console.log('Number of NFTs requested to be minted is', count);

    const tx = await this.state.contract.methods.mint(addressTo, count).send({from: this.state.account})

    console.log('Transaction from calling mint function is:', tx);
  } catch (err) {
    console.error('mint执行出错:', err)
  }
}
  • 校验网络与出块配置
    你已经确认链上mint成功,说明交易已经上链,大概率是web3等待确认的逻辑卡住:

    • 确认Metamask连接的网络RPC地址、链ID和你启动ganache-cli的参数完全一致,ganache默认端口为8545、默认链ID为1337,要和Metamask的自定义网络配置完全对应
    • 检查ganache是否开启了自动出块:如果启动ganache时没有加--blockTime [秒数]参数,ganache默认只在收到交易时出块,你可以启动时加上ganache-cli --blockTime 1设置每秒自动出块,避免web3等待确认超时
  • 调整web3 send方法配置
    你可以给send方法传入额外配置,降低确认要求,或者主动监听交易事件,不用等完全确认就执行后续逻辑:

// 方式1:设置0个区块确认就resolve
const tx = await this.state.contract.methods.mint(addressTo, count).send(
  {from: this.state.account},
  {confirmationBlocks: 0}
)

// 方式2:监听事件分步处理逻辑
this.state.contract.methods.mint(addressTo, count).send({from: this.state.account})
.on('transactionHash', (hash) => {
  console.log('交易已提交,哈希:', hash)
})
.on('receipt', (receipt) => {
  console.log('交易已确认,收据:', receipt)
})
.on('error', (err) => {
  console.error('交易出错:', err)
})
  • 检查web3初始化逻辑
    确认你初始化web3实例时用的是Metamask的provider,而非本地ganache的provider,避免交易签名和确认逻辑出现不一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:06:00