我有一个棱角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
方法。
答案 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/