Skip to content

Commit 9623266

Browse files
authored
errata1a/signal-forms: validateHttp mit onError (#113)
1 parent b641ceb commit 9623266

2 files changed

Lines changed: 63 additions & 2 deletions

File tree

material/errata-1a/README.md

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: "Errata zur 1. Auflage (2026)"
33
published: 2026-03-13
4-
lastModified: 2026-07-16
4+
lastModified: 2026-07-31
55
hidden: true
66
---
77

@@ -113,6 +113,36 @@ Wenn die Resource hingegen im Test direkt erzeugt wird (ohne Funktion), ist `use
113113
```
114114

115115

116+
## 25.5.6 `validateHttp()` benötigt `onError`
117+
118+
Im Abschnitt zu asynchroner Validierung mit Signal Forms haben wir die Funktion `validateHttp()` vorgestellt.
119+
Im Listing 25.16 zeigen wir die Optionen `request` und `onSuccess`.
120+
Dieses Beispiel funktioniert nicht, denn `validateHttp()` erfordert zwingend auch noch die Option `onError`:
121+
122+
```ts
123+
validateHttp(path.title, {
124+
request: (ctx) => `/api/check?username=${ctx.value()}`,
125+
onSuccess: (taken: boolean) => taken ? { kind: 'usernameTaken', message: 'Anmeldename ist schon vergeben.' } : undefined,
126+
onError: (error, ctx) => ({ kind: 'usernameCheckFailed', message: 'Prüfung fehlgeschlagen' })
127+
});
128+
```
129+
130+
Dieses Callback wird ausgeführt, wenn der HTTP-Request fehlschlägt.
131+
In unserem Beispiel ist das ein ungewünschter Fehlerfall: Der Endpunkt `/api/check` antwortet immer mit Erfolg und transportiert das Ergebnis `taken` in der Antwort.
132+
`onError` bedeutet hier, dass die Prüfung gar nicht ausgeführt werden konnte.
133+
134+
Wenn die API anders funktioniert, kann das Callback-Paar `onSuccess`/`onError` aber auch für die beiden Ergebnisse der Validierung eingesetzt werden.
135+
Im folgenden Beispiel fragen wir ein ganzes Buch beim Server an. Der Statuscode der Antwort entscheidet über die Validierung: Ein Fehler in der API-Antwort bedeutet hier, dass das Buch nicht existiert.
136+
137+
```ts
138+
validateHttp(path.isbn, {
139+
request: (ctx) => `https://api1.angular-buch.com/books/${ctx.value()}`,
140+
onSuccess: () => ({ kind: 'isbnExists', message: 'ISBN existiert bereits.' }),
141+
onError: () => undefined,
142+
});
143+
```
144+
145+
116146
## 25.5.8 Logik für Schema-Funktionen
117147

118148
Im Theoriekapitel zu Signal Forms erläutern wir die Funktionen `disabled()`, `hidden()` und `readonly()`.

material/signal-forms/README.md

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: 'Updates zu Signal Forms'
33
published: 2026-05-06
4-
lastModified: 2026-05-15
4+
lastModified: 2026-07-31
55
hidden: true
66
---
77

@@ -24,6 +24,37 @@ In unserer englischsprachigen Artikelserie zu Signal Forms gehen wir auch auf As
2424
**In diesem Artikel sammeln wir dennoch einige kleinere Aspekte, die sich nach dem Release des Angular-Buchs geändert haben.**
2525

2626

27+
28+
## 25.5.6 `validateHttp()` benötigt `onError`
29+
30+
Im Buch stellen wir die Funktion `validateHttp()` mit den Optionen `request` und `onSuccess` vor.
31+
Dieses Beispiel funktioniert allerdings nicht, die Option `onError` ist zwingend erforderlich:
32+
33+
```ts
34+
validateHttp(path.title, {
35+
request: (ctx) => `/api/check?username=${ctx.value()}`,
36+
onSuccess: (taken: boolean) => taken ? { kind: 'usernameTaken', message: 'Anmeldename ist schon vergeben.' } : undefined,
37+
onError: (error, ctx) => ({ kind: 'usernameCheckFailed', message: 'Prüfung fehlgeschlagen' })
38+
});
39+
```
40+
41+
Das Callback `onError` wird ausgeführt, wenn der HTTP-Request fehlschlägt.
42+
In unserem Beispiel ist das ein ungewünschter Fehlerfall: Der Endpunkt `/api/check` antwortet immer mit Erfolg und transportiert das Ergebnis `taken` in der Antwort.
43+
`onError` bedeutet also, dass die Prüfung gar nicht ausgeführt werden konnte.
44+
45+
Wenn die API anders funktioniert, kann das Callback-Paar `onSuccess`/`onError` aber auch für die beiden Ergebnisse der Validierung eingesetzt werden.
46+
Im folgenden Beispiel fragen wir ein ganzes Buch beim Server an. Der Statuscode der Antwort entscheidet über die Validierung: Ein Fehler in der API-Antwort bedeutet hier, dass das Buch nicht existiert.
47+
48+
```ts
49+
validateHttp(path.isbn, {
50+
request: (ctx) => `https://api1.angular-buch.com/books/${ctx.value()}`,
51+
onSuccess: () => ({ kind: 'isbnExists', message: 'ISBN existiert bereits.' }),
52+
onError: () => undefined,
53+
});
54+
```
55+
56+
57+
2758
## 25.5.8 Logik für Schema-Funktionen mit `when`
2859

2960
Im Buch erläutern wir die Funktionen `disabled()`, `hidden()` und `readonly()`.

0 commit comments

Comments
 (0)