我觉得我在这里缺少什么。我有一项可以获取一些数据的服务。我将其转换为Promise,然后尝试使用单独的方法来处理数据。

一旦碰到该方法,我便失去了访问通常可以从this.thing进行访问的对象的能力。如果我将所有代码从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);
    }
}

最佳答案

这是因为您引用了一个函数,却失去了该函数的上下文。要解决此问题,您需要将函数显式链接到对象。

您可以使用bind方法:

ngOnInit(){
this._scheduleDataService.getSavedScheduleData(this.buildDateStringFromCalendar(),1004)
      .toPromise()
      .then(this.addToJobsTree.bind(this); // <-----
}

(注意:这是将bind方法与TypeScript一起使用的缺点:https://basarat.gitbooks.io/typescript/content/docs/tips/bind.html)

或使用箭头功能来解决此问题:
ngOnInit(){
this._scheduleDataService.getSavedScheduleData(this.buildDateStringFromCalendar(),1004)
      .toPromise()
      .then((data) => { // <-----
        this.addToJobsTree(data);
      });
}

关于javascript - Angular2。在Promise中失去此范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38818006/

10-12 00:49