При входе в ответ, как
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"));
Что вы должны сделать:
Пусть этот метод возврата наблюдаемым и позволяет сказать, название компонентов является 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;
})
Возможный дубликат [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an -асинхронный вызов) – jonrsharpe