我有以下问题; Observable始终返回undefined。 我认为我并没有真正需要使用HttpClient与AuthGuard一起工作。
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable < boolean > {
var bool
var token = localStorage.getItem('Authorization');
if (token != null) {
this.http.post('http://localhost:5000/v1/logstatus?token=' + token, this.authData).subscribe(res => {
if (!JSON.stringify(res).includes('AuthorizationNotFound')) {
bool = true
} else {
bool = false
}
})
} else {
bool = false
}
console.log(bool)
return observableOf(bool)
}
答案 0 :(得分:0)
this.http.post
是一个异步操作,因此您要在of(bool)
被结果定义之前返回bool
。重新说明一下,of(bool)
在POST结束之前就已解决,并设置了bool
的值。
相反,您可以map
观察到布尔值的响应,然后直接将其返回。将您的if
块更改为:
if (token != null) {
return this.http.post('http://localhost:5000/v1/logstatus?token=' + token, this.authData)
.map(res => !JSON.stringify(res).includes('AuthorizationNotFound'));
}
这将使POST可观察的地图直接映射到您要查找的布尔值。
不相关,但是如果您尚未关联,则应考虑向此调用添加错误处理逻辑,因为如果POST调用失败,您的防护就会中断。