getEmployee(id : number) : void{
var e : Employee;
this.http.get(this.employeesUrl + '/' + id)
.map(response => <Employee>response.json())
.subscribe((res) =>{e = res},
(err)=>console.log(err),
()=>console.log("Done"));
console.log(e.Name);
}
执行res
时返回的console.log(res)
正确打印employee
对象。但是当我尝试将它分配给变量时,它会给我一个页长错误。虽然它最后打印完成。
花了3个小时。在这些和已经经历了很多SO帖子,但无法弄明白
答案 0 :(得分:1)
如果您记录响应
var e : Employee;
this.http.get(this.employeesUrl + '/' + id)
.map(response => <Employee>response.json())
.subscribe((res) =>{e = res},
(err)=>console.log(err),
()=>console.log("Done"));
console.log(e.Name);
当然,您会看到空白/错误状态,因为上面的代码(this.http.get
)是异步的。这意味着您正在提出请求,那么您正在等待subscribe
内的响应,当它到来时,您将e
分配给res
或打印您想要的任何内容。等待时您已经记录(e.Name
)。由于"e"
最初未定义,e.Name
是错误。
请尝试此操作并检查日志,
var e : Employee;
this.http.get(this.employeesUrl + '/' + id)
.map(response => <Employee>response.json())
.subscribe((res) =>{
e = res;
console.log(e.Name);
},
(err)=>console.log(err),
()=>console.log("Done"));
你应该做什么:
让此方法返回一个observable,并假设组件名称为GetEmployeeService
,
getEmployee(id : number) : Observable<Employee>{
return this.http.get(this.employeesUrl + '/' + id)
.map(response => <Employee>response.json())
}
并在任何地方订阅此observable(在调用此服务的类中)您要使用它
constructor(..., private myService: getEmployeeService)
...
//the place where you need the response
this.myService.subscribe((res)={
console.log(res);
//do something with res here
this.field = res;
})