javascript - 如何让我的 if 语句等待获取请求完成( GUARD )使用角度
问题描述
我想为我的 Angular 应用程序创建管理路由。我在 Angular 中创建了一个角色守卫。请参阅下面的代码。
现在我希望我的 get 请求在我的 if 语句开始检查用户是否是管理员之前完成。有没有办法做到这一点?
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;
}
}
解决方案
不要订阅,返回一个 observable。就像是
return this.apiService.getUserAdminData().pipe(
tap(user => this.user = user),
map(user => user.user_role === 'admin')
);
推荐阅读
- python - 是否可以使用内联语句?
- python - 如何创建一个条形图,其下方有一个表格,显示单个条形值,如 Excel 图表表
- c# - 迁移到 .net core 3 添加 TResult IAsyncQueryProvider 时的 IAsyncQueryProvider 模拟问题
- javascript - Javascript计算季节
- python - 如何将数据框行转换为列?
- javascript - 如何从控制器获取保存的下拉值以查看
- salesforce - 在 Salesforce Lightning 控制台中 - 无法将机会添加为案例的子选项卡
- google-sheets - 有没有办法在执行 batchGet 之前等待 Google 表格完成计算?
- google-bigquery - 如何从 Cloud Function 执行 .sql 文件(BigQuery)?
- python - 如何在时间序列图中使用 FuncAnimation?