什么是RxJS中的SwitchMap

时间:2018-03-15 13:10:31

标签: angular rxjs

我在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

1 个答案:

答案 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,然后就可以使用