RXJS /可观察到的角度替换

问题描述 投票:0回答:1

[在角度拦截器中,我想检查是否存在身份验证令牌。如果没有,则应刷新并重新发送请求。

return next.handle(authReq).pipe(map((result: any) => {
  if (result.body && result.body.error) {
    if (result.body.error === 'ERR_TOKEN_EXPIRED' || result.body.error === 'ERR_TOKENS_DO_NOT_MATCH') {
      console.log('Token is expired or invalid, refreshing.', result.body.error);

      return this.userService.refreshLoginToken().subscribe(success => {
        if (success) {
          return this.intercept(req, next);
        }
      });
    }
  }
  return result;
}));

问题是我不知道如何用新的替换next.handle()返回的原始Observable。 this.userService.refreshLoginToken().subscribe()之前的return语句返回一个Subscription对象。如果我仅通过管道传递refreshLoginToken()的结果,它将不起作用,因为refreshLoginToken发送一个httprequest,该请求仅在有订阅时才执行。

将问题简化为一行:如何将第1行中返回的Observable由next.handle()替换为this.intercept(req, next)返回的那个?]

谢谢!

[在角度拦截器中,我想检查是否存在身份验证令牌。如果没有,则应刷新并重新发送请求。返回next.handle(authReq).pipe(map((result:any)=> {...

angular rxjs angular-httpclient angular-http-interceptors rxjs-observables
1个回答
0
投票

我认为您应该采取其他方法。

© www.soinside.com 2019 - 2024. All rights reserved.