angular - canActivated 保护的返回值错误
问题描述
我写下面的代码作为我的主页保护,用于checkTokenValidation()
验证用户的身份验证令牌,但我的 IDE 显示此错误:声明类型既不是“void”也不是“any”的函数必须返回一个值。我返回我的订阅布尔值,但我不知道为什么我有这个问题。我测试了我的代码并了解我的代码不会将我的返回行执行为真或假,这很奇怪。
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
this.authService.checkTokenValidation().subscribe((data) => {
console.log(data);
if (data['ok']) {
this.router.navigate(['/overview']);
return false;
} else {
return true;
}
});
}
解决方案
通过订阅,您将返回 aSubscription
而不是Observable
. 您应该映射到所需的值并返回Observable
:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
return this.authService.checkTokenValidation().pipe(
map( (data) => {
if (data['ok']) {
this.router.navigate(['/overview']);
return false;
} else {
return true;
}
})
);
}
推荐阅读
- java - 如何测试是否将正确的 lambda 值作为参数传递(使用 Mockito)?
- matlab - Matlab repelem 的 Eigen 等价物是什么?
- rest - Google、Microsoft、FB 使用什么框架来记录他们的 REST API
- javascript - CSS Animation underlaps bootstrap striped table rows
- unity3d - Unity如何将相机边框作为vector3?
- android - 从 onActivityResult 获取分享值
- ecmascript-6 - aurelia 错误(0,_bootstrap2.default)不是函数
- git - 如何在 git 历史记录中查找推送/常见提交?
- osgi - 声明式服务策略模式
- python - 如何在循环中创建长度为 n 的整数的 python 系列