Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度-拦截器HTTP从promise返回值_Angular_Http_Interceptor - Fatal编程技术网

Angular 角度-拦截器HTTP从promise返回值

Angular 角度-拦截器HTTP从promise返回值,angular,http,interceptor,Angular,Http,Interceptor,我必须对通过拦截器返回的请求体应用解密,但是解密方法是异步的,并返回承诺 这是课堂上的一段摘录: intercept(请求:HttpRequest,下一步:HttpHandler):可观察>{ 返回next.handle(req).pipe(map)(事件:HttpEvent)=>{ if(HttpResponse的事件实例){ 让我们的身体; this.cryptMethod.decrypt(event.body).this(res=>\u body=res);//Método assínc

我必须对通过拦截器返回的请求体应用解密,但是解密方法是异步的,并返回承诺

这是课堂上的一段摘录:

intercept(请求:HttpRequest,下一步:HttpHandler):可观察>{
返回next.handle(req).pipe(map)(事件:HttpEvent)=>{
if(HttpResponse的事件实例){
让我们的身体;
this.cryptMethod.decrypt(event.body).this(res=>\u body=res);//Método assíncrono
返回event.clone({body:JSON.parse(_body)});
}
返回事件;
}));

}`
您可以从
mergeMap
返回承诺,并将
map
链接到它。不要使用
。然后
也可以使用
异步

.pipe(mergeMap(async (event: HttpEvent<any>) => {
  if (event instanceof HttpResponse) {
    const _body = await this.cryptMethod.decrypt(event.body);
    return event.clone({ body: JSON.parse(_body) });
  }
});
.pipe(合并映射(异步(事件:HttpEvent)=>{
if(HttpResponse的事件实例){
const_body=wait this.cryptMethod.decrypt(event.body);
返回event.clone({body:JSON.parse(_body)});
}
});
你也可以这样做:

.pipe(
  mergeMap(async (event: HttpEvent<any>) => {
    if (event instanceof HttpResponse) {
      return this.cryptMethod.decrypt(event.body);
    }
  }),
  map(_body => {
    if (_body) {
      return event.clone({ body: JSON.parse(_body) });
    }
  })
);
.pipe(
合并映射(异步(事件:HttpEvent)=>{
if(HttpResponse的事件实例){
返回this.cryptMethod.decrypt(event.body);
}
}),
地图(_body=>{
如果(_body){
返回event.clone({body:JSON.parse(_body)});
}
})
);

…但它更详细,需要两个条件检查。

谢谢!第一个解决方案成功了!非常感谢!