知道 API 请求在飞行中花费的时间 - Angular 9
Know the time spent by API request in flight - Angular 9
我正在尝试拦截 angular 中的请求,以了解 API 是否在飞行中花费了超过 5 秒。如果 API 花费的时间超过 5 秒,则需要显示一条消息,例如 'Request in progress, it will take a short while'
我能够计算出 API 在收到如下回复后花费的时间:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const startTimestamp = +new Date().getTime();
return next.handle(req).pipe(
tap(
(evt: HttpEvent<any>) => {
const endTimestamp: number = +new Date().getTime();
// get the difference
const responseTimes = (endTimestamp - startTimestamp) / 1000;
console.log(`Request took ${responseTimes} ms`);
}
)
}
但是,我想知道请求进行中的时间。任何线索将不胜感激。
我认为使用 setInterval
可以满足您的问题:
(这将每 10 毫秒检查一次请求开始时花费的时间和当前时间)
@Injectable()
export class MyHttpInterceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const t0 = performance.now();
let interval;
console.log('processing request', request);
interval = setInterval(() => {
const t1 = performance.now();
const responseTime = (t1 - t0) / 1000;
console.log(`Request took ${responseTime} ms since start`);
}, 10);
return next.handle(request).pipe(
tap((ev: HttpEvent<any>) => {
if (ev instanceof HttpResponse) {
console.log('processing response', ev);
}
}),
catchError((response) => {
if (response instanceof HttpErrorResponse) {
console.log('processing http error', response);
}
return Observable.throw(response);
}),
finalize(() => {
const t1 = performance.now();
const totalResponseTime = (t1 - t0) / 1000;
console.log(`Request finished: took ${totalResponseTime} ms`);
clearInterval(interval);
}),
);
}
}
我正在尝试拦截 angular 中的请求,以了解 API 是否在飞行中花费了超过 5 秒。如果 API 花费的时间超过 5 秒,则需要显示一条消息,例如 'Request in progress, it will take a short while'
我能够计算出 API 在收到如下回复后花费的时间:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const startTimestamp = +new Date().getTime();
return next.handle(req).pipe(
tap(
(evt: HttpEvent<any>) => {
const endTimestamp: number = +new Date().getTime();
// get the difference
const responseTimes = (endTimestamp - startTimestamp) / 1000;
console.log(`Request took ${responseTimes} ms`);
}
)
}
但是,我想知道请求进行中的时间。任何线索将不胜感激。
我认为使用 setInterval
可以满足您的问题:
(这将每 10 毫秒检查一次请求开始时花费的时间和当前时间)
@Injectable()
export class MyHttpInterceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const t0 = performance.now();
let interval;
console.log('processing request', request);
interval = setInterval(() => {
const t1 = performance.now();
const responseTime = (t1 - t0) / 1000;
console.log(`Request took ${responseTime} ms since start`);
}, 10);
return next.handle(request).pipe(
tap((ev: HttpEvent<any>) => {
if (ev instanceof HttpResponse) {
console.log('processing response', ev);
}
}),
catchError((response) => {
if (response instanceof HttpErrorResponse) {
console.log('processing http error', response);
}
return Observable.throw(response);
}),
finalize(() => {
const t1 = performance.now();
const totalResponseTime = (t1 - t0) / 1000;
console.log(`Request finished: took ${totalResponseTime} ms`);
clearInterval(interval);
}),
);
}
}