在我的angular 2应用程序中,我需要通过插入来验证每个请求 标题中的标记。我有一个服务,可以创建请求标头和 插入令牌。问题是,检索令牌的方法是异步的。所以在下面的代码中,http get在令牌之前执行 可以插入标题。
有没有更好的方法来强制http get等待令牌被删除?
代码:
getData(query: Vehicle): Observable<ResultWrapper> {
this.spinnerService.show();
return this.http
.get(`${this.myService.apiEndpoint}/vehicles?name=${query.make}`,
{ headers: this.myService.getHeaders() })
.map(this.extractData)
.catch(this.exceptionService.catchBadResponse)
.finally(() => {
this.spinnerService.hide();
});
}
为myService:
getHeaders(): any {
// this is call to an asynchronous javascript method
this.config.getToken(function (responseData) {
if (!responseData.error) {
responseData.headers.append('Authorization', "Bearer " + responseData.token);
return responseData.headers;
});
}
答案 0 :(得分:0)
你当然可以解决问题 - 但也许有更好的方法来实现它。例如,您的Auth服务(myService)将保留一个缓存的令牌并将其传递给请求者(例如,返回localStorage.getItem('auth_token')的getAccessToken()方法)。然后你会使用像
这样的东西let headers = new Headers({ 'Authorization': 'Bearer ' + this.myService.getAccessToken() });
然后你只需要在令牌到期时捕获getData调用(代码401)上的错误并且只是请求一个新的。