如何修复访问foundApplication[0].id时报Cannot read property id of undefined的问题
报错原因
Error : Cannot read property id of undefined
上述报错触发的原因是:当查询返回的foundApplication为空数组时,foundApplication[0]取值为undefined,直接读取id属性就会抛出异常;另外即便数组存在第一个元素,如果该元素没有id字段,也会导致后续逻辑异常。
修复后代码
如果你的运行环境支持ES2020+的可选链语法,可以用更简洁的写法:
async function getApplicationByCbaxUid(cbaxUid) { let foundApplication = await dbService.application .find({ userID: cbaxUid }); // 安全读取id,不符合条件时不会抛出异常 return getDocument(foundApplication?.[0]?.id); }
如果需要兼容低版本JS运行环境,可以替换为显式判断写法:
async function getApplicationByCbaxUid(cbaxUid) { let foundApplication = await dbService.application .find({ userID: cbaxUid }); const appId = Array.isArray(foundApplication) && foundApplication[0] && foundApplication[0].id ? foundApplication[0].id : undefined; return getDocument(appId); }
适配说明
- 两种写法都保证
foundApplication为空、第一个元素不存在、第一个元素无id字段这三种场景下,当前函数都不会崩溃抛出异常 - 全程未修改
getDocument函数,符合要求 - 你可以根据业务需要调整不符合条件时传给
getDocument的参数,比如把默认的undefined替换为null或者其他业务默认值
内容的提问来源于stack exchange,提问作者art
相关产品推荐
相关产品推荐

