我在Angular 5项目中使用Restangular。在addErrorInterceptor section中,如果您查看代码,则会调用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
<div class="mask3">
</div>
<div class="img">
<img src="https://beebom-redkapmedia.netdna-ssl.com/wp-content/uploads/2016/01/Reverse-Image-Search-Engines-Apps-And-Its-Uses-2016.jpg" />
</div>
</div>
方法,然后在refreshAccesstoken
部分中获取新的访问令牌。到目前为止,我已经在我的switchMap
方法中返回了replySubject
,所以如果我订阅了返回值,我就可以获得新的访问令牌,但我无法获取它switchMap因为我不知道它是什么(我也搜索过switchMap,但我发现了一些对我没有帮助的功能)。
这是我的AuthService.refreshAccessToken代码:
refreshAccesstoken
答案 0 :(得分:2)
为什么需要使用ReplySubject? 您似乎只是用它来发出新的访问令牌。
如果是这种情况,如果我不遗漏某些内容,那么您可以通过更简单的方式获得相同的结果,例如
refreshAccessToken() {
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).map(
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
return this.accessToken;
}
);
}
基本上,您只需将subscribe
替换为map
,然后就可以使用