代码之家  ›  专栏  ›  技术社区  ›  Gargoyle

从角度HttpInterceptor调用承诺

  •  1
  • Gargoyle  · 技术社区  · 6 年前

    HttpInterceptor 我需要调用一个定义如下的加密方法:

    private async encrypt(obj: any): Promise<string> {
    

    我不知道如何在HttpInterceptor中处理这个问题:

    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        const modified = req.clone({ 
           body: this.encrypt(req.body)
        });
    
        return next.handle(modified).pipe(
    

    我不知道如何把这两个联系在一起,这样我就可以打电话给 encrypt 方法从 intercept 功能。

    2 回复  |  直到 6 年前
        1
  •  6
  •   Sachila Ranawaka    6 年前

    使用 from switchMap 操作员执行您需要的修改并返回处理程序。

      intercept(request: HttpRequest<any>, next: HttpHandler) : Observable<HttpEvent<any>>{
            return from( this.encrypt(req.body))
                  .pipe(
                    switchMap(data=> { // do the changes here
                      const modified = req.clone({ 
                               body: data
                      });
    
                      return next.handle(modified)
                    })
                   );
        }
    
        2
  •  0
  •   Yoarthur    6 年前

    from 组件中的运算符。

    import { from } from 'rxjs';
    

    然后调用encrypt()方法,并在响应中返回下一个.handle()对象。这样地。

    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    
      from(encrypt(obj: any).then(
      (data) => {  
       /* do the modifications */
       const modified = req.clone({ ..... });
       ...
       /* return the object interceptor function so it can work */
        next.handle(modified) 
      })
    

    https://www.learnrxjs.io/