2016-09-28 65 views
0

我想通过后端API的方式验证用户令牌。一般来说,我是Angular2的全新品牌。我的问题是,如果我想isValidToken返回布尔值是否提供的令牌是有效的,我怎么能等待HTTP调用完成之前从isValidToken()返回结果?Angular2 HTTP Get Observable - 如何等待结果

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()); 
} 

回答

1

isValidToken需要返回Observable<boolean>Promise<boolean>。它不能同步返回值,因为它依赖于异步方法获得结果。

它一直在下降。

+0

是的,我一直在读这一切。你可以举一个例子,但我如何在另一种方法中使用返回的值? – blgrnboy

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