2016-02-28 112 views
3

我开始学习Angular 2,并且遇到了使用Promise.then从服务返回对象的问题。我目前只使用固定数组(COACHES)伪造数据库调用。在我服务的功能如下Angular 2 Promise问题

getCoach(id: number) { 
    return Promise.resolve(COACHES).then(
     coaches => coaches.filter(coach => coach.id == id)[0] 
    ); 
} 

然后我用这在我的coach_detail.component.ts在ngOnInit钩来获得主教练的对象我想用路线PARAMS:

export class CoachDetailComponent implements OnInit { 

    coach: Coach; 

    constructor(
     private _coachService: CoachService, 
     private _routeParams: RouteParams) {} 

    ngOnInit() { 
     let id = +this._routeParams.get('id'); 
     this._coachService.getCoach(id).then(coach => this.coach = coach); 
     console.log(this.coach); 
    } 
} 

我可以看到我的控制台的承诺正在恢复回到我的组件,但是console.log(this.coach)正在恢复为undefined

任何帮助是非常赞赏,因为我使用了相似的逻辑在不同的组件返回教练的完整列表,并能正常工作!

回答

5

您的console.log()在诺言链之前被调用。

ngOnInit() { 
    let id = +this._routeParams.get('id'); 
    this._coachService.getCoach(id).then(coach => { 
     this.coach = coach 
     console.log(this.coach); // not undefined 
    }); 
    console.log(this.coach); // undefined 
} 
+0

但是我不是在组件中定义的“coach”变量上调用console.log吗? 'this._coachService.getCoach(id)'应该将返回的对象分配给'this.coach'。我的问题的确是我的箭头功能没有正确分配 –

+0

嗯,你的代码看起来很好。你能用例子来创造一个沉睡者吗? – Sasxa

+0

有点笨拙,但在这里你去:https://plnkr.co/edit/Sk4GH2mgoJ2XkQ7Tr1qN我谈论的问题是当你进入“教练”页面,然后尝试选择一个教练的名字。 –