【发布时间】:2016-12-03 10:42:08
【问题描述】:
我有 2 个服务(AuthService 和 AuthRedirectService)
AuthService 使用 Http 服务从服务器获取简单数据{"status": 4} 和return response.json().status
AuthRediredService 实现 OnActivate 并使用 AuthService 服务。这是唯一的方法 AuthService.GetStatus() : number,但它返回undefined
AuthService
GetStatus(): number {
let status: number;
this.http.get(this.host + "/api/auth/")
.subscribe((value: Response) => {
status = value.json().status;
console.log(value.json().status); // write real number 4
});
return status; // 4
}
AuthRedirectService
canActivate() : boolean
{
console.log(this.auth.GetStatus()); // undefined !!!!!!!!
if(this.auth.GetStatus() == StatusCode.Logined)
{
// redirect code
return false;
}
return true;
}
【问题讨论】:
-
http.get是异步的,在它解析之前您已经从GetStatus()返回。 -
您可以在此处查看 Gunter 的回答:stackoverflow.com/questions/38425461/… 以获得灵感并更深入地了解异步 canActivate() 实现。
标签: angular typescript dependency-injection angular-services