【问题标题】:want to call a service method in authguard services想在 authguard 服务中调用服务方法
【发布时间】:2021-07-01 01:21:27
【问题描述】:

我是 Angular 的新手,我只需要在 authguard 服务中调用一个服务方法。我刚需要的服务功能如下。注意:不想改变服务功能。

loadOrganizations() {
    this.getOrganizations().subscribe(
      (results) => {
        const organizationList = [];
        if (results.organizations) {
          results.organizations.forEach((element) => {
            this.appendOrganization(element, organizationList);
            this.loadChildrenOrganization(element.children, organizationList);
          });
        }
        this.organizations$.next(organizationList);
        this.organizations$.complete();
      },
      (error) => {
        this.organizations$.next([]);
        this.organizations$.complete();
      }
    );
  }

我的authguard ts中的调用方法如下。

canActivate(
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ): Promise<boolean> {
 
     this.appService.loadOrganizations().then((answer: boolean) => {
          return answer;
      });
  }

我在“Promise”和“then”处收到了返回类型错误。关于如何在 authguard 服务中调用此服务方法的任何线索?

【问题讨论】:

  • 你需要先在你的 loadorganisation 函数中将 observable 转换为 promise -learnrxjs.io/learn-rxjs/operators/utility/topromise
  • 我们不能在不改变 loadorganisation 函数的情况下将这个函数的 observable 转换为 authguard 函数中的 promise 吗
  • 你需要返回 observable 然后在 auth guard 服务中订阅它
  • loadOrganizations() 函数不返回任何内容,既不承诺也不可观察。返回 observable 然后你可以订阅或者可以将其转换为 promise。

标签: angular typescript angular-services auth-guard


【解决方案1】:

感谢您的支持。我已经解决了

canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
     this.appService.loadOrganizations();
     console.log("authuard is calling")
     return true;
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多