从Angular HttpInterceptor调用Promise

时间:2018-12-24 04:17:38

标签: angular typescript observable es6-promise

我有一个棱角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 个答案:

答案 0 :(得分:2)

使用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)
                })
               );
    }

答案 1 :(得分:0)

在组件中导入from运算符。

import { from } from 'rxjs';

然后调用您的crypto()方法,并在响应中返回next.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/