HttpInterceptor после конвейерных операторов rxjs
Можно ли перехватить запрос get HttpClient после выполнения некоторых конвейерных операторов rxjs. В моем случае у меня есть автоматически сгенерированный http-сервис, который преобразует ответы 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
0 ответов
На самом деле мы создали функцию для преобразования 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);
}
});
}