在我的 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();
});
}
我的服务:
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;
});
}
你当然可以解决这个问题 - 但也许有更好的方法来实现它。例如,您的身份验证服务(myService)将保留缓存的令牌并将其传递给请求者(例如,getAccessToken()方法将返回localStorage.getItem('auth_token'))。然后你会使用类似的东西
let headers = new Headers({ 'Authorization': 'Bearer ' + this.myService.getAccessToken() });
然后,您只需要在 getData 调用(代码 401)上捕获令牌过期时的错误,然后请求一个新错误。