调用API后返回对象属性访问undefined问题求助
问题分析与解决方案
1. 属性大小写不匹配导致undefined
API返回的对象属性是小写开头的:message、isSuccess、data,但你代码里用result.Message(首字母大写)访问,自然会返回undefined。正确的访问方式应该是result.message。
修改对应代码行:
console.log("2: ", result.message); // 改用小写的message
2. ResultModel构造函数未正确映射属性
你实例化ResultModel时传入了返回的result对象,但构造函数没有把传入对象的小写属性映射到自身的大写属性上,导致实例化后属性值异常。需要修改ResultModel的构造函数,处理属性的大小写转换:
class ResultModel<T> { IsSuccess: boolean; Message: string; Data: T; constructor(obj: { isSuccess: boolean; message: string; data: T }) { this.IsSuccess = obj.isSuccess; this.Message = obj.message; this.Data = obj.data; } }
修改后再执行var p = new ResultModel(result);,就能得到正确的实例属性值。
代码优化建议(可选)
使用async/await替代嵌套then,让代码更简洁易读:
try { const response = await fetch(i.login.url, { method: i.login.methodType, body: JSON.stringify(data), headers: { "Content-Type": "application/json", }, }); if (!response.ok) { const result = await response.json() as { isSuccess: boolean; message: string; data: boolean }; console.log("1: ", result); console.log("2: ", result.message); const p = new ResultModel(result); console.log(p); } } catch (error) { // 捕获并处理请求或解析错误 }
内容的提问来源于stack exchange,提问作者Radim Cieslar
相关产品推荐
相关产品推荐

