首页 > 解决方案 > subscribe() 函数是否同步执行?

问题描述

只是想仔细检查一下。 我有这个演示

其中有一个AuthenciatedGuard带有以下块的:

Auth.isSignedIn().subscribe(yes=>{
  if (yes) {
      this.router.navigate(['/home']);
      return false;
  }
});
return true;

所以我只想确保subscribe()语句保证false在我们到达行之前完全执行并返回return true

标签: javascriptangulartypescriptrxjs

解决方案


你可以只返回一个Observable<boolean>

return Auth.isSignedIn().pipe(map(yes=>{
  if (yes) {
      this.router.navigate(['/home']);
      return false;
  } else {
     return true;
  }
}));

您还可以使用Promise返回类型,以便创建您的函数async并使用 await 将其转换Observable为 a Promise

async canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Promise<boolean> {
    const yes = await Auth.isSignedIn().toPromise();
    if (yes) {
      this.router.navigate(['/home']);
      return false;
    }
    return true;
}

一个async函数只能返回一个Promise.

运行示例。


推荐阅读