我在Angular 5项目中使用Restangular . 在addErrorInterceptor section中,如果查看代码,则调用 refreshAccesstoken
方法,然后在 switchMap
部分中获取新的访问令牌 . 到现在为止,我正在 refreshAccesstoken
方法中返回一个 replySubject
,所以如果我订阅了返回值,我可以获得新的访问令牌,但我知道它是什么(我've also searched for switchMap but I just found some functions which didn' t帮助我) .
这是我的AuthService.refreshAccessToken代码:
refreshAccessToken() {
let resultSubject: ReplaySubject<any> = new ReplaySubject<any>();
const url = this.AUTH_URL + 'oauth/token';
const requestOptions = {
headers: new Headers({
authorization: 'Basic ' + btoa(this.clientId + ':' + this.clientSecret),
'Content-Type': 'application/x-www-form-urlencoded'
})
};
const body = {
grant_type: 'refresh_token',
refresh_token: this.refreshToken,
// scope: ''
};
let params = this.utilityService.convertObjectToURLParams(body);
this._http.post(url, params.toString(), requestOptions).subscribe(
response => {
let result = response.json();
// console.log('refreshed_access_token', result);
this.accessToken = result.access_token
this.refreshToken = result.refresh_token
this.expireIn = result.expire_in
resultSubject.next(this.accessToken);
},
error => {
resultSubject.error(error);
}
);
return resultSubject;
}
1 回答
为什么需要使用ReplySubject?您似乎只是用它来发出新的访问令牌 .
如果是这种情况,如果我不错过任何东西,那么你可以用更简单的方式达到相同的结果,比如
基本上你只需用
map
替换subscribe
然后它应该工作