下面是我在TypeScript中实现的CanActivate保护子句,当我编译这段代码时,它显示如下错误
声明类型既不是'void'也不是'any'的函数必须返回一个值
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):boolean {
this.appService.isValidUser().subscribe({
next: (data) => data.authenticated, // this return true or false
error: (err) => false
});
}
出现此错误的原因是什么?
答案 0 :(得分:3)
canActivate
应该返回Observable
而不是Subscription
。如果您致电.subscribe()
,您将获得Subscription
,因此我们会使用.map()
。
要处理错误案例,请使用.catch()
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):Observable<boolean> {
return this.appService.isValidUser()
.map(data => data.authenticated)
.catch(_ => Observable.of([false]));
}
不要忘记导入所有操作符
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';