鉴于此方法: 为什么登录状态为 null 而不是 false ?
// this method is called below, I am attempting to return only true or false.
isLoggedIn(): Observable<boolean> {
return this
.loadToken()
.catch(e => {
this.logger.info(e); // this is being logged...
this.token = null;
return Observable.of(false); // and I specifically return false.
})
.map(_ => this.token && this.token.access_token.length > 0);
从这里
调用return this.authService.isLoggedIn().map(_ => {
this.logger.info(`authorisation guard :: login status ${_}`);
if (_)
return true;
this.router.navigate(["login"]);
return Observable.of(false);
}).catch(_ => {
this.logger.info(`authorisation guard :: login error ${_}`);
this.router.navigate(["login"]);
return Observable.of(false);
});
记录以下内容:
2017-09-09T06:55:46Z [INFO] authorisation guard :: login status null
我期待
2017-09-09T06:55:46Z [INFO] authorisation guard :: login status false
答案 0 :(得分:3)
您已将catch
放在map
:
isLoggedIn(): Observable<boolean> {
return this
.loadToken()
.catch(e => {
this.logger.info(e);
this.token = null;
return Observable.of(false);
})
.map(_ => this.token && this.token.access_token.length > 0);
这意味着当loadToken
中发生错误时,它将被catch
捕获,并且将使用catch
运算符返回的observable恢复可观察链:{{1 }}
因此,Observable.of(false)
将被传递到false
,在此处将被忽略,并且map
的值将被返回 - 因为它将是this.token
并且将失败逻辑表达式中的第一个测试。
您很可能希望将null
放在catch
之后。