我有一个Angular2组件需要从外部服务获取ID。此服务返回一个promise,因此我需要等待Promise在继续之前获取数据。该组件看起来像这样:
export class AddTodoComponent implements OnInit {
public todo:TodoItem;
constructor(private todoService: TodoService,
private router: Router) {
this.todo = new TodoItem();
}
saveItem(){
this.todoService.getItems().then(t=>{
this.todo.item.id = t.length;
this.todoService.addItem(this.todo);
});
}
}
但是,当saveItem函数执行时,我在控制台中收到错误,如下所示:
EXCEPTION:错误:未捕获(在承诺中):TypeError:无法设置 财产' id'未定义的
该服务只返回Promise.resolve(data)
包含我需要的项目,并且我已经验证了按预期返回数据。但是,现在似乎在承诺的' thennable '中我无法再访问this.todo
,因为现在它指的是承诺而不是类。
解决此问题的正确/首选方法是什么?
答案 0 :(得分:3)
因为todo
是项
this.todo = new TodoItem();
this.todo.item
(item
实例的属性TodoItem
) ...未定义。所以,它应该是init (无论如何,在构造函数内部,或者在下面如下)
this.todo.item= this.todo.item || {} ; // just init item
this.todo.item.id = t.length;
答案 1 :(得分:3)
问题与this
的值无关 - 由于使用了"胖箭头"它仍然引用AddTodoComponent
类实例。函数(=>
)。
相反,问题似乎是item
没有this.todo
属性,因此您无法设置this.todo.item.id
。
答案 2 :(得分:2)
该错误并未表示this
未指向AddTodoComponent
的当前实例,而是item
的{{1}}未定义。该错误似乎在this.todo
中,未定义new TodoItem()
。