Angular 2.在Promise中失去了这个范围

And*_*ton 2 javascript promise angular

我觉得我在这里错过了一些东西.我有一个抓取一些数据的服务.我将其转换为承诺,然后尝试以单独的方法处理数据.

一旦它击中了方法,我就失去了访问我通常会从此访问的对象的能力.无论如何.如果我将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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Thi*_*ier 8

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

您可以使用以下任一bind方法:

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

(注意:使用bindTypeScript方法的缺点是:https://basarat.gitbooks.io/typescript/content/docs/tips/bind.html)

或箭头功能来解决这个问题:

ngOnInit(){
this._scheduleDataService.getSavedScheduleData(this.buildDateStringFromCalendar(),1004)
      .toPromise()
      .then((data) => { // <-----
        this.addToJobsTree(data);
      });
}
Run Code Online (Sandbox Code Playgroud)