2016-09-28 95 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),以便調用者能夠訂閱和註冊在發生數據事件或發生錯誤時要調用的回調函數。