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.