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

求助:遭遇Uncaught (in promise) TypeError,无法读取undefined的duration属性

解决"Cannot read properties of undefined (reading 'duration')"错误
  • 错误本质:你在尝试读取一个**未定义(undefined)**对象的duration属性,说明存储投票详情的变量没有拿到有效数据。

  • 排查异步数据加载逻辑:
    找到你调用合约获取投票详情的异步代码(比如类似getVotingInfo的函数),在调用后立刻打印返回值:

    const votingDetails = await yourContractMethod();
    console.log('投票详情数据:', votingDetails);
    

    看看控制台输出是不是undefined,如果是,说明合约调用没返回数据——检查传的投票ID是否正确,或者合约中对应投票是否存在。

  • 加空值防护避免报错:
    在读取duration前先判断对象是否存在,比如把原来的代码:

    const duration = votingDetails.duration;
    

    改成:

    if (!votingDetails) {
      // 可以显示加载中提示,或者直接终止后续逻辑
      console.log('投票详情未加载完成');
      return;
    }
    const duration = votingDetails.duration;
    

    嫌麻烦的话也可以用可选链简化:const duration = votingDetails?.duration;,这样不会直接抛出错误,后续再处理duration为undefined的情况。

  • 处理Promise异常:
    错误提示是Uncaught (in promise),说明你的异步合约调用没做异常处理。用try/catch包裹async/await代码:

    async function loadVotingRoomData() {
      try {
        const votingDetails = await contract.methods.getVoting(...).call();
        // 正常处理数据、存储duration
      } catch (err) {
        console.error('加载投票数据失败:', err);
        // 给用户显示错误提示,比如"无法获取投票信息,请重试"
      }
    }
    

    这样能捕获合约调用失败的情况,也能帮你定位是不是合约交互出了问题。

  • 核对合约返回结构:
    检查Solidity合约中返回投票详情的函数,确认它确实返回了包含duration的结构(比如结构体或者对应字段的数组)。如果合约返回的是数组,前端却当成对象读属性,也会触发这个错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:01:14