我觉得我在这里遗漏了一些东西。我有一个抓取一些数据的服务。我将其转换为承诺,然后尝试以单独的方法处理数据。
当它遇到方法时,我失去了访问我通常会从此访问的对象的能力。无论如何。如果我将addJobsToTree中的所有代码保留在then块中,它可以正常工作。我也可以从组件中的其他位置访问它。我确定我正在做一些愚蠢但却无法理解的事情。
ngOnInit(){
this._scheduleDataService.getSavedScheduleData(this.buildDateStringFromCalendar(),1004)
.toPromise()
.then(this.addToJobsTree);
}
private addToJobsTree(res){
for(let xx of res){
this._sharedService.jobs.push(xx); //Comes back as cannot read _sharedService of null
console.log(this._sharedService.jobs);
}
}
答案 0 :(得分:8)
这是因为你引用了一个函数而你失去了函数的上下文。要解决此问题,您需要将函数显式链接到对象。
您可以使用bind
方法:
ngOnInit(){
this._scheduleDataService.getSavedScheduleData(this.buildDateStringFromCalendar(),1004)
.toPromise()
.then(this.addToJobsTree.bind(this); // <-----
}
(注意:这是使用TypeScript的bind
方法的缺点:https://basarat.gitbooks.io/typescript/content/docs/tips/bind.html)
或箭头功能来修复:
ngOnInit(){
this._scheduleDataService.getSavedScheduleData(this.buildDateStringFromCalendar(),1004)
.toPromise()
.then((data) => { // <-----
this.addToJobsTree(data);
});
}