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)});
}
})
);
…但它更详细,需要两个条件检查。谢谢!第一个解决方案成功了!非常感谢!