Angular2:如何锁定方法访问?

Angular2:如何锁定方法访问?,angular,angular-ui-router,Angular,Angular Ui Router,我的代码中有这样的内容 类AuthenticationGuard实现了CanActivate 异步canActivate(…){ console.log('canActivate….1'); const currentRole=this.settings.getCurrentRole(); if(!currentRole) console.log('canActivate….2'); currentRole=等待此.service.fetchAuthRoleFromServer(url); 在

我的代码中有这样的内容

类AuthenticationGuard实现了CanActivate
异步canActivate(…){
console.log('canActivate….1');
const currentRole=this.settings.getCurrentRole();
if(!currentRole)
console.log('canActivate….2');
currentRole=等待此.service.fetchAuthRoleFromServer(url);
在AuthenticationService中,我有如下内容

类身份验证服务{
构造函数(设置:设置){
sett.initData(…);
在设置类中:

类设置
异步initData(…){
log('initData….1');
const role=wait roleService.getAuthenticated();
log('initData….2');
this.setCurrentRole(角色);
log('initData….3');
日志文件最终看起来像

initData….1
激活
激活
初始化数据…2
初始化数据…3
是否有方法锁定方法
this.settings.getCurrentRole()
,直到我至少达到
initData….3
(在同一类[
settings
]中)

我尝试了一些关于信号量的调查,但不知何故无法让它们运行(在角度上)…要么我安装了错误的软件包,要么…但也许有一个更合适的解决方案

更新:
经过一些研究,我发现这个问题与受保护的路由机制高度相关,事实上,我需要在canActivate中初始化一些数据,我需要检查这些数据是否已经登录。如果没有,则获取内容或移动到登录页。但无论如何,该机制非常奇怪。

这对用户有效2/4

您可以将行为主体添加到“initdate”函数(可以是布尔值或数字):


如果您使用Observable,则无法锁定,但可以等待发出数据。请提供相关服务的代码。您是否可以包含更多的代码,谁使用
canActivate
initDate
,您是否正在等待调用
async
调用?
class settings
  isInitDone = new BehaviorSubject<boolean>(false);

  async initDate(...){
    console.log('initData....1');
    const role = await roleService.getAuthenticated();
    console.log('initData....2');
    this.setCurrentRole(role);
    console.log('initData....3');

    //give a new value to this subject
    this.isInitDone.next(true);
  }
class Auth...
async canActivate(...) {
console.log('canActivate....1');

this.settings.isInitDone.subscribe(isAvailable => {
  if (isAvailable) {
    //Do your stuff
  }
});