Când un endpoint efectuează apeluri către baze de date supraîncărcate sau servicii terțe blocate, firul de execuție poate rămâne ocupat indefinit. TimeoutInterceptor impune o durată maximă permisă (de exemplu 5 secunde).
Dacă funcția nu returnează în acest interval, operatorul RxJS timeout() declanșează o eroare TimeoutError, interceptată și transformată într-un RequestTimeoutException (HTTP 408).
Exemplu: TimeoutInterceptor cu aruncare RequestTimeoutException
import { Injectable, NestInterceptor, ExecutionContext, CallHandler, RequestTimeoutException } from '@nestjs/common';
import { Observable, throwError, TimeoutError } from 'rxjs';
import { catchError, timeout } from 'rxjs/operators';
@Injectable()
export class TimeoutInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable {
return next.handle().pipe(
timeout(5000), // Maxim 5 secunde
catchError((err) => {
if (err instanceof TimeoutError) {
return throwError(() => new RequestTimeoutException('Timpul alocat cererii a expirat (5000ms)'));
}
return throwError(() => err);
}),
);
}
}
Întrebări & Exemple de Cod:
TimeoutInterceptor și Anularea Cererilor LenteAi o nelămurire despre utilizarea comenzii
TimeoutInterceptor și Anularea Cererilor Lentesau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.