Я использую Angular 7, теперь есть метод (Angular guard CanActivate), который содержит несколько вложенных методов вызова http, мне нужно возвращать данные после завершения всех вложенных вызовов http.
Как показано в коде ниже, только после того, как getCurrentUser()
закончено, верните результат в canActivate()
, тогда как теперь всегда возвращается false, потому что getCurrentUser()
еще не закончено.
export class AuthGuard implements CanActivate{
constructor(private commonService: CommonService) {
}
async canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {
console.log('======');
await this.getCurrentUser();
return this.hasAccess;
}
hasAccess: boolean = false;
async getCurrentUser(){
await this.commonService.getToken().subscribe(token => {
this.commonService.getCurrentUser(param, token).subscribe(o => {
if(o.success){
this.hasAccess = true;
}else {
window.location.href = '/forbidden.html';
}
}, error => {
console.log(error);
});
});
console.log("async");
}
}
Вы можете видеть, что есть два асинхронных метода: A, B должны быть в ожидании, и A, B не параллельны, я проверил документы об Promise и async / await, не нашел решения.
Поскольку ожидание всегда должно следовать за асинхронным, как я могу позволить canActivate()
вернуть результат после завершения всего асинхронного http-вызова?
+++ Обновление
this.commonService.getToken()
иthis.commonService.getCurrentUser(param, token)
http http (HttpClient), я пробовал много решений, но безрезультатно.