Angular2 HTTP Get Observable - 如何等待结果

时间:2016-09-28 22:48:50

标签: arrays angular

我正在尝试通过后端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());
}

2 个答案:

答案 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),以便能够订阅并注册在发出数据事件或发生错误时调用的回调。