我正在尝试通过后端API验证用户令牌。我一般都是Angular2的新手。我的问题是,如果我想让isValidToken返回一个布尔值,表明提供的令牌是否有效,我怎样才能在从isValidToken()返回结果之前等待HTTP调用完成?
isValidToken(token: string): boolean {
var isValidToken: boolean = false;
this.getIsValidToken(token).subscribe(
data => {
isValidToken = data.isValidToken;
return isValidToken;
},
error => {
return false;
}
);
}
getIsValidToken(token: string) {
return this.http.get(this.validateTokenUrl + '?tokenString=' + token)
.map(res => res.json());
}
答案 0 :(得分:1)
isValidToken
需要返回Observable<boolean>
或Promise<boolean>
。它不能同步返回值,因为它依赖于异步方法来获得它的结果。
这是乌龟一路下来。
答案 1 :(得分:0)
isValidToken(token: string): boolean {
return this.getIsValidToken(token);
}
getIsValidToken(token: string) {
return this.http.get(this.validateTokenUrl + '?tokenString=' + token)
.map(res => res.json());
}
然后你可以像
一样使用它someMethod() {
this.isValidToken.subscribe(token => {
if(token) {
this.success = true;
// or some other code that should be executed when `token` is `true`
} else {
this.success = false;
// or some other code that should be executed when `token` is `false`
}
},
error => {
this.success = false;
// or some other code that should be executed when `token` is `false`
});
}
您无法从异步调用中同步执行。您所能做的就是为调用者返回observable(或promise),以便能够订阅并注册在发出数据事件或发生错误时调用的回调。