2016-11-13 77 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

請提出我的問題,如果它是好的 –