javascript / expert
Snippet
Funktionales Error-Handling mit Result-Monaden
Indem traditionelle try-catch-Blöcke durch einen Result-Typ ersetzt werden, wird eine vollständige Fehlerprüfung zur Kompilierzeit erzwungen. Dieses Muster ist besonders nützlich in Next.js Server Actions, um sicherzustellen, dass alle Fehlerszenarien explizit behandelt werden, bevor eine Antwort an den Client gesendet wird.
snippet.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
type Result<T, E = Error> = { ok: true; value: T } | { ok: false; error: E };async function safeFetchUser(id: string): Promise<Result<User>> {try {const user = await db.users.findUnique({ where: { id } });if (!user) return { ok: false, error: new Error('User not found') };return { ok: true, value: user };} catch (e) {return { ok: false, error: e as Error };}}const response = await safeFetchUser('123');if (response.ok) { console.log(response.value); }
nextjs
Erklärung
1
type Result<T, E = Error> = ...
Definiert einen Union-Typ, der entweder eine erfolgreiche Berechnung oder einen Fehler darstellt.
2
if (!user) return { ok: false, error: ... };
Gibt explizit einen Fehlerstatus zurück, anstatt einen Fehler zu werfen, wodurch der Fehler Teil des API-Vertrags wird.
3
if (response.ok) { ... }
Nutzt Type-Narrowing von TypeScript, um sicher auf den Wert zuzugreifen, wenn die Operation erfolgreich war.