0 Tage Serie
javascript / intermediate
Snippet

Strukturierung domänenspezifischer Fehlerklassen für granulare Ausnahmebehandlung

Die Erstellung objektorientierter Fehlerhierarchien, die auf JavaScripts Basis-Error aufbauen, ermöglicht den Transport typisierter Domänenmetadaten (wie Transaktions-IDs). Das Setzen der Prototypenkette mittels Object.setPrototypeOf garantiert verlässliche instanceof-Prüfungen über Komponentengrenzen hinweg.

snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
export class ApplicationError extends Error {
public readonly timestamp: number = Date.now();
constructor(message: string, public readonly code: string) {
super(message);
this.name = this.constructor.name;
Object.setPrototypeOf(this, new.target.prototype);
}
}
export class PaymentGatewayTimeoutError extends ApplicationError {
constructor(public readonly transactionId: string, public readonly retryAfterMs: number) {
super(`Payment gateway timed out for transaction ${transactionId}`, 'ERR_PAYMENT_TIMEOUT');
}
}
export function resolveErrorRecovery(err: unknown): { fallbackUi: string; canRetry: boolean } {
if (err instanceof PaymentGatewayTimeoutError) {
return { fallbackUi: 'GatewayBusyPrompt', canRetry: err.retryAfterMs < 5000 };
}
if (err instanceof ApplicationError) {
return { fallbackUi: 'GenericDomainErrorBanner', canRetry: false };
}
return { fallbackUi: 'CriticalCrashScreen', canRetry: false };
}
vue
Erklärung
1
export class ApplicationError extends Error {
Deklariert eine abstrakte Basisfehlerklasse mit gemeinsamen Eigenschaften wie Zeitstempeln und Fehlercodes.
2
Object.setPrototypeOf(this, new.target.prototype);
Stellt die Prototypenkette für benutzerdefinierte Klassen bei der Vererbung von ES Error korrekt wieder her.
3
export class PaymentGatewayTimeoutError extends ApplicationError {
Erweitert die Basisfehlerklasse um spezifische Attribute wie transactionId und Wiederholungszeiten.
4
if (err instanceof PaymentGatewayTimeoutError) {
Wertet typisierte Klasseninstanzen aus, um granulare Wiederherstellungsaktionen im Handler zu wählen.