Ad
How Can I Let My If Statement Wait For Get Request To Complete ( GUARD ) Using Angular
I want to create admin routes for my angular app. I've created a role guard in angular. See my code below.
Now I want my get request to complete before my if statement starts checking if the user is an admin. Is there a way to do this?
export class RoleGuardGuard implements CanActivate {
public user;
constructor( private apiService: ApiService ) {}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
this.apiService.getUserAdminData().subscribe((data)=>{
this.user = data;
});
if (this.user.user_role === 'admin') {
return true;
} else {
return false;
}
}
Ad
Answer
Don't subscribe, return an observable. Something like
return this.apiService.getUserAdminData().pipe(
tap(user => this.user = user),
map(user => user.user_role === 'admin')
);
Ad
source: stackoverflow.com
Related Questions
- → How to update data attribute on Ajax complete
- → October CMS - Radio Button Ajax Click Twice in a Row Causes Content to disappear
- → Octobercms Component Unique id (Twig & Javascript)
- → Passing a JS var from AJAX response to Twig
- → Laravel {!! Form::open() !!} doesn't work within AngularJS
- → DropzoneJS & Laravel - Output form validation errors
- → Import statement and Babel
- → Uncaught TypeError: Cannot read property '__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED' of undefined
- → React-router: Passing props to children
- → ListView.DataSource looping data for React Native
- → Can't test submit handler in React component
- → React + Flux - How to avoid global variable
- → Webpack, React & Babel, not rendering DOM
Ad