TypeError:无法读取未定义的属性(读取';id';) [英] TypeError: Cannot read properties of undefined (reading 'id')
本文介绍了TypeError:无法读取未定义的属性(读取';id';)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的终端中有此错误:
TypeError:无法读取未定义的属性(读取‘id’)
我正在尝试测试对API的调用,但出现错误。
我的函数:
itemToForm = () => {
this.api.send(this.component, 'get',
{ lang: 'ES', filter: { id: this.item['id'] } }
).then(resEsp => {
this.item = resEsp['data'][0];
this.api.send(this.component, 'get',
{ lang: 'EN', filter: { id: this.item['id'] } }
).then(res => {
let itemEng = res['data'][0];
let fields = this.formDef.map(register => register.filter(
field => field['register_table'].indexOf('traduction') !== -1
).map(
field => field['field_name'])
).filter(register => register.length);
fields = fields.length ? fields[0] : [];
if (itemEng) {
this.item = Object.keys(itemEng).reduce((obj, key) => {
obj[key] = this.item[key];
if (fields.indexOf(key) !== -1) {
obj[key + '_eng'] = itemEng[key];
}
return obj;
}, {});
}
if (this.item) {
this.setForm();
}
})
})
}
我的规格文件:
it('should call api.send', () => {
let spy1 = spyOn(api, 'send');
let item = {
id: 1,
name: 'test',
}
component.addItem(item);
component.itemToForm();
expect(spy1).toHaveBeenCalled();
});
推荐答案
发生了什么:
函数itemToForm()
在this.item
准备好之前被调用。
有很多策略可以避免此错误。非常简单的一种策略是在函数开头添加一个捕获器,如下所示:
itemToForm = () => {
if(this.item === undefined) {return}
// The rest of the code
}
如果数据尚不存在,则此操作将停止该函数。
更好的解决方案可能是进一步提高您的操作顺序,找出是谁在调用itemToForm()
,并确保在调用之前数据已经存在。
这篇关于TypeError:无法读取未定义的属性(读取';id';)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文