Angular rxjs可管道运算符之后的HttpInterceptor

Angular rxjs可管道运算符之后的HttpInterceptor,angular,rxjs,angular5,angular-httpclient,angular-httpclient-interceptors,Angular,Rxjs,Angular5,Angular Httpclient,Angular Httpclient Interceptors,在rxjs的一些可管道操作符执行之后,是否可以拦截HttpClient get请求。在我的例子中,我有一个自动生成的http服务,它将blob响应转换为对象。我的全局错误拦截器也需要转换blob,因为它在服务中的可管道操作符之前触发 伪代码示例: 我的要求是: this.httpClient.get('api/something') .pipe(map(x => ({modified: true}))) .subscribe();

在rxjs的一些可管道操作符执行之后,是否可以拦截HttpClient get请求。在我的例子中,我有一个自动生成的http服务,它将blob响应转换为对象。我的全局错误拦截器也需要转换blob,因为它在服务中的可管道操作符之前触发

伪代码示例:

我的要求是:

this.httpClient.get('api/something')
               .pipe(map(x => ({modified: true})))
               .subscribe();
我的HttpClient拦截器:

intercept(req, next) {
    return next.handle(req)
               .pipe(tap(x => {console.log(x);})); 
}
期望的行为: console.log应该从map操作符输出我修改过的对象。似乎拦截器总是链中的第一部分

我的问题: 有可能达到我想要的输出吗


BR

我们实际上创建了一个函数来将blob转换为有用的内容:

打字稿:

    private transformBlobToJson = (
        response: HttpResponseBase
      ): Promise<string> => {
        return new Promise(resolve => {
          const responseBlob =
            response instanceof HttpResponse
              ? response.body
              : (<any>response).error instanceof Blob
              ? (<any>response).error
              : undefined;
          blobToText(responseBlob)
            .pipe(
              map(responseText => {
                if (responseText !== null) {
                  const responseObject: ICustomResponseModel = JSON.parse(
                    responseText
                  );
                  return responseObject.message
                    ? responseObject.message
                    : responseObject.title;
                }
                return null;
              })
            )
            .subscribe(res => {
              return resolve(res);
            });
        });
    }

    function blobToText(blob: any): Observable<string> {
      return new Observable<string>((observer: any) => {
        if (!blob) {
          observer.next('');
          observer.complete();
        } else {
          const reader = new FileReader();
          reader.onload = event => {
            observer.next((<any>event.target).result);
            observer.complete();
          };
          reader.readAsText(blob);
        }
      });
    }
private transformBlobToJson=(
响应:HttpResponseBase
):承诺=>{
返回新承诺(解决=>{
常量响应BLOB=
HttpResponse的响应实例
?响应。主体
:(响应)。Blob的错误实例
?(回答)。错误
:未定义;
blobToText(响应Blob)
.烟斗(
映射(responseText=>{
if(responseText!==null){
常量响应对象:ICustomResponseModel=JSON.parse(
响应文本
);
返回responseObject.message
?响应对象消息
:responseObject.title;
}
返回null;
})
)
.订阅(res=>{
返回解析(res);
});
});
}
函数blobToText(blob:any):可观察{
返回新的可观察对象((观察者:任意)=>{
如果(!blob){
观察员。下一个(“”);
observer.complete();
}否则{
const reader=new FileReader();
reader.onload=事件=>{
observer.next((event.target.result);
observer.complete();
};
reader.readAsText(blob);
}
});
}

您是否找到了解决此问题的方法?我们在NSwag生成的TS客户端上面临着完全相同的问题。不幸的是,没有:(我保留了我的变通解决方案。您的变通方法是什么?代码重复,因为我无法重用自动生成的私有blob reader函数