Angular 8订阅了拦截器中的可观察对象

彭兹

我正在尝试编写HTTP拦截器,以向请求添加“访问级别”参数。我试图从可观察的currentAccessLevel $获取值。但是,observable未正确返回,并且拦截器中断了整个请求周期。

这个问题在这里这里已经有了答案,但是,在Angular 8中似乎无法接受这个答案。我不确定我是在做错什么还是在Angular 8中对拦截器进行了某种更改。

我也尝试使用switchMap,flatMap和mergeMap。

import { Injectable } from '@angular/core';
import {
  HttpRequest,
  HttpHandler,
  HttpEvent,
  HttpInterceptor
} from '@angular/common/http';
import { Observable } from 'rxjs';
import { switchMap } from 'rxjs/operators';
import { AuthService } from 'src/app/services/auth/auth.service';

@Injectable()
export class AccessLevelInterceptor implements HttpInterceptor {
  private accessLevel: string;

  constructor(private authService: AuthService) { }

  // Intercept HTTP Requests
  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    // Get current value of access level observable from authentication service
    return this.authService.currentAccessLevel$
      .mergeMap(res => next.handle(request));

  }

}

currentAccessLevel $是在服务中作为BehaviorSubject创建的字符串值,然后将其转换为Observable。这样,字符串的当前值可以在多个组件之间共享。

// Create a BehaviorSubject to track and share updates to currentAccessLevel value
  private currentAccessLevel: string;
  currentAccessLevelSubject: BehaviorSubject<string> = new BehaviorSubject(this.currentAccessLevel);
  currentAccessLevel$ = this.currentAccessLevelSubject.asObservable();
费德里科·加菲奥内

是的,自Rxjs 5.5起,这不再起作用。您需要使用管道方法来连接运算符:

return this.authService.currentAccessLevel$
      .pipe(mergeMap(res => next.handle(request)));

在这里看看以了解有关管道的更多信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

角度10:我的请求在拦截器中的http请求中可观察到的订阅之后未发送

Angular2中的拦截器

angular2 / 4可观察的订阅

Angular 4如何在解析器中返回多个可观察对象

从Angular HttpInterceptor中的可观察对象返回可观察对象

取消订阅Angular服务中的无限可观察对象的最佳方法是什么

从rxjs和angular的可观察值中获取值后,如何处理拦截器上的请求?

如何测试使用Angular 6+调用可观察对象的拦截器?

订阅可观察的Angular HTTP拦截器,然后返回next.handle但抛出TypeError:您提供了“未定义”

Angular 7:拦截器中的Await函数

Angular 7拦截器

如何在拦截器Angular 8中传递用户ID

订阅Angular 8中可观察到组件的问题

是否应该取消订阅根Angular组件中的可观察对象?

Angular 8-依次调用可观察对象

Angular 8和内部订阅可观察的设置

Ionic 4,Angular 8和HTTP拦截器

angular 8:在Angular cli中生成拦截器时出现“在集合中未找到示意图”拦截器”的错误

重新订阅带有rx-angular的可观察对象

Angular JS拦截器

Angular中的拦截器,仅用于某些通话吗?

Angular2中的可观察对象

订阅 Angular 2 中可观察的时间时出错

Angular 可观察订阅问题

在 Angular 中链接可观察订阅的最佳方式?

Angular HTTP 拦截器 - 无法从内部订阅返回

Angular 8 - 在 PUT 调用中修改 request.body 中的属性时,拦截器抛出错误

Angular:订阅可观察对象时数据未定义

在 Angular/RxJS 中订阅和可观察的键