我有一个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:无法设置undefined的属性“id”
该服务只返回带有我需要的项目的 Promise.resolve(data)
,并且我已经验证了正在按预期返回数据 . 然而,现在似乎在承诺的'thennable'里面我再也无法访问 this.todo
,因为这现在指的是承诺而不是类 .
解决这个问题的正确/首选方法是什么?
3 回答
问题与
this
的值无关 - 由于使用了"fat arrow"函数(=>
),它仍然引用了AddTodoComponent
类实例 .相反,问题似乎是
this.todo
没有item
属性,所以你不能再设置this.todo.item.id
.因为
todo
是 itemthis.todo.item
(TodoItem
实例的属性item
)未定义 . 所以,它应该首先是init(无论如何,在构造函数内部,或者如下所示)该错误并不表示
this
未指向AddTodoComponent
的当前实例,而是item
的item
未定义 . 该错误似乎在new TodoItem()
中没有定义item
.