求助:遭遇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
相关产品推荐
相关产品推荐

