Angular 2 observable不将返回的对象赋值给变量

时间:2016-11-13 15:54:32

标签: rest http angular

     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帖子,但无法弄明白

1 个答案:

答案 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;
})