2016-11-13 31 views
-1
 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小时。关于这些和已经通过很多,所以职位的走了,但如果你登录像角2可观察到的不分配返回对象到可变

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); 

响应当然,你会看到,因为上面的代码空白/错误状态无法弄清楚

+1

的[我如何返回从一个异步调用的响应?(可能的复制http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an - 异步调用) – jonrsharpe

回答

1

this.http.get )是异步的。意思是你正在提出请求,然后你正在等待subscribe中的响应,当它发生时,你将分配eres或打印任何你想要的。在等待的时候你已经在记录(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")); 

你应该做的:

让这个方法返回一个可观察到的和让说的组件名称为GetEmployeeService

getEmployee(id : number) : Observable<Employee>{ 
     return this.http.get(this.employeesUrl + '/' + id) 
     .map(response => <Employee>response.json()) 

} 

并订阅这个可观察的地方(在调用此服务的类中)要使用它

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; 
}) 
+1

它正在工作,但如何将此对象返回到调用此服务的类??? –

+0

@mohit设置是不正确的,你真的不应该在这里订阅这个观察点。我会更新我的回答 – echonax

+0

请提出我的问题,如果它是好的 –