У меня есть 2 услуги (AuthService & AuthRedirectService)Угловая возвращение 2. Обслуживание неопределенными
AuthService использует Http сервис для получения простых данных {"status": 4}
с сервера и return response.json().status
< - номер
AuthRediredService реализует OnActivate и использует AuthService обслуживание. Это единственный метод AuthService.GetStatus(): число, но он возвращает 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() 'перед его разрешением. – silentsod
Вы можете проверить ответ Гюнтера здесь: http://stackoverflow.com/questions/38425461/angular2-canactivate-calling-async-функция для вдохновения и более глубокое понимание реализаций async canActivate(). – silentsod