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

web3调用合约add方法await后无返回 后续代码不执行问题排查

问题排查与解决方法
  • 首先添加异常捕获逻辑,确认await执行过程中是否抛出了未处理的错误,原有代码没有错误捕获分支,一旦promise进入reject状态就会直接中断后续代码执行,不会有任何日志输出。改造后的代码示例:
onSubmit = async (event) => {
  try {
    event.preventDefault()
    console.log("Submitting the form...")
    var day = new Date(Date.now()).getDate()
    var month = new Date(Date.now()).getMonth() + 1
    var year = new Date(Date.now()).getFullYear()
    var today = new Date(year, month -1, 1)
    // 注意:JS getTime返回的是毫秒级时间戳,以太坊合约普遍使用秒级时间戳,这里大概率是问题根源
    var todayTime = Math.floor(today.getTime() / 1000) 

    const ipfsadded = await ipfs.add({path:this.state.fileName, content:this.state.buffer})
    var ipfsHash = ipfsadded.cid.toString()
    this.setState({ipfsHash: ipfsHash})
    console.log('hash:', ipfsHash, " / name =", this.state.fileName )

    console.log("inserindo na blockchain..")

    const accounts = await web3.eth.getAccounts()
    // 先估算gas,避免固定gas值不足
    const gasLimit = await contract.methods.add(ipfsHash, this.state.fileName, this.state.fileType, todayTime).estimateGas({from:accounts[0]})
    console.log("估算gas值:", gasLimit)
    // 传入确认数配置,默认等待1个区块确认就返回
    var result = await contract.methods.add(ipfsHash, this.state.fileName, this.state.fileType, todayTime)
    .send({from:accounts[0], gas: gasLimit})
    .on('transactionHash', (hash) => {
      console.log("交易已提交,哈希:", hash)
    })
    .on('confirmation', (confNumber, receipt) => {
      console.log("确认数:", confNumber)
    })
    console.log("resultado =", result) 
    console.log("File submitted on blockchain!") 
  } catch (e) {
    console.error("执行过程报错:", e)
  }
}
  • 校验入参格式是否符合合约要求:最常见的问题是时间戳单位不匹配,JS生成的getTime()是13位毫秒值,而以太坊合约中block.timestamp返回的是10位秒级时间戳,如果合约的add方法中存在require(_time <= block.timestamp)之类的校验,传入毫秒值会直接触发校验失败,交易执行revert,自然不会返回结果。
  • 检查合约与节点配置:确认ABI和合约地址是最新部署的版本,web3连接的链ID与MetaMask当前使用的链ID一致,节点处于正常同步状态没有区块延迟。
  • 调整web3确认配置:web3.js默认需要等待2个区块确认才会resolve promise,如果链出块速度慢,可以手动调整send方法的确认数阈值,设置为1即可大幅降低等待时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:57:04