javascript - subscribe() 函数是否同步执行?
问题描述
只是想仔细检查一下。 我有这个演示。
其中有一个AuthenciatedGuard
带有以下块的:
Auth.isSignedIn().subscribe(yes=>{
if (yes) {
this.router.navigate(['/home']);
return false;
}
});
return true;
所以我只想确保subscribe()
语句保证false
在我们到达行之前完全执行并返回return true
。
解决方案
你可以只返回一个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
.
推荐阅读
- c# - Angular 8 + Jwt + [Authorize] + DotNet Core 2.1 Api + Chrome 发布请求失败并出现 cors 错误
- jwt - auth0 node-jsonwebtoken 中的选项 notBefore 有什么用?
- rx-java2 - 如何使用来自另一个可观察 rx kotlin 的结果过滤可观察发出的列表?
- javascript - Vuejs 数组渲染
- c# - LINQ 更改 dict 中的 KeyValuePair
- c# - unity transform.up 不旋转
- generics - 如何强制客户端代码使用合约初始化 Kotlin 中所有必需的构建器字段?
- delphi - Delphi:挂钩 TImageList 以按需加载图像
- debugging - 当执行的代码在函数内部时,Pycharm 断点挂起
- laravel - 在模型属性上创建 ware 子句