Я использую HttpInterceptor
, и у меня есть служба Http, которая вызывает методы http, работающие с HttpClient. Я пытаюсь получить прогресс загрузки и столкнулся с двумя проблемами здесь,
Во-первых, событие progress перехватывается только HttpInterceptor
, а не любым из моих методов вызова Http в моем сервисе. похоже, что первый маскирует отчет о проделанной работе.
Во-вторых, значение прогресса всегда начинается с 100% и начинает приращение.
Я лениво загружаю свой модуль, HttpInterceptor зарегистрирован на уровне app.module.
Как я могу получить значение прогресса из метода http?
мой HttpInterceptor
сервис выглядит,
if (req.url.search('https') < 0) {
const headers = new HttpHeaders({
Accept: 'application/json',
Authorization: `Bearer ${this.authService.getToken()}`,
'X-XSRF-TOKEN': `${this.authService.getAntiforgeryToken()}`,
ClientTimeZoneOffest: `${new Date().getTimezoneOffset()}`,
ClientTimeZoneId: Intl.DateTimeFormat().resolvedOptions().timeZone,
ClinetLogInId: `${this.authService.getLogInId()}`,
});
const cloneReq = req.clone({ headers });
return next.handle(cloneReq).pipe(
mergeMap((ev: HttpEvent<any>) => {
if (ev.type === HttpEventType.UploadProgress) {
const percentDone = Math.round((100 * ev.loaded) / ev.total);
console.log(`File is ${percentDone}% uploaded.`);
}
this.httpResponseHandlerService.handleSuccessResponse(ev);
return Observable.of(ev);
}),
catchError(error => {
this.httpResponseHandlerService.handleErrorResponse(error, req);
return Observable.throw(error);
}),
);
} else {
return next.handle(req);
}
}
мой Http-сервис,
public upload<T>(apiUrl: string, jsonData: {} = {}) {
return this.httpService.post<T>(this.baseUrl + apiUrl, jsonData, {
reportProgress: true,
});
}
и метод, в котором я пытаюсь добиться прогресса, подобен
this.httpService
.upload(this.api + this.id.value, data)
.takeUntil(this.unsubscribe)
.subscribe((ev: HttpEvent<any>) => { // Nothing is happening here!
if (ev.type === HttpEventType.UploadProgress) {
const percentDone = Math.round((100 * ev.loaded) / ev.total);
console.log(`File is ${percentDone}% uploaded.`);
}
});
Прогресс поведения,