fetch() mit async/await und sauberem try/catch
Daten von einer API holen ist mit fetch() und async/await lesbar wie synchroner Code. Der Haken: fetch wirft bei 404 oder 500 keinen Fehler – du musst response.ok selbst prüfen.
fetch() ist der moderne Weg, im Browser Daten zu laden. Mit async/await liest sich der Code fast wie synchroner Code. Ein Stolperstein, den ich immer wieder sehe: fetch() wirft nur bei Netzwerkfehlern eine Exception – ein HTTP-Status wie 404 oder 500 gilt technisch als „erfolgreich". Deshalb musst du response.ok selbst prüfen.
Die Funktion
async function ladeBenutzer(id) {
try {
const response = await fetch(`/api/users/${id}`, {
headers: { Accept: 'application/json' },
});
// fetch wirft NICHT bei 404/500 – deshalb hier selbst prüfen:
if (!response.ok) {
throw new Error(`Server antwortete mit ${response.status}`);
}
const daten = await response.json();
return daten;
} catch (fehler) {
// Landet hier bei Netzwerkabbruch ODER dem oben geworfenen Fehler.
console.error('Laden fehlgeschlagen:', fehler.message);
throw fehler; // an den Aufrufer weiterreichen
}
}Aufrufen
ladeBenutzer(42)
.then((user) => {
document.querySelector('#name').textContent = user.name;
})
.catch(() => {
document.querySelector('#name').textContent = 'Konnte nicht geladen werden.';
});Die zwei Dinge, die diesen Code robust machen: die response.ok-Prüfung, damit Fehlercodes nicht als leere Daten durchrutschen, und das try/catch, das Netzwerkabbruch und HTTP-Fehler an einer Stelle einfängt. Wenn du willst, kannst du mit AbortController obendrauf noch ein Timeout ergänzen.
Genau so binde ich in meinen Websites Formulare und Live-Daten an. Wenn du eine moderne Seite mit dynamischen Inhalten brauchst, findest du mich auf bymw.de.
Quellen
Du brauchst mehr als ein Snippet?
Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.
Projekt anfragen →Verwandte Rezepte
Debounce in Vanilla JavaScript – ohne Bibliothek
Eine Suche, die bei jedem Tastendruck feuert, überlastet den Server. Mit einer kleinen debounce-Funktion wartest du, bis der Nutzer kurz Pause macht – in wenigen Zeilen, ganz ohne Framework.
Retrofit mit Coroutines und sauberer Fehlerbehandlung
Eine suspend-Funktion in Retrofit, ausgeführt auf dem IO-Dispatcher und in ein Result gekapselt – so trennst du Netzwerkfehler, HTTP-Fehler und Erfolg sauber voneinander.
Robustes Bash-Grundgerüst mit set -euo pipefail
Ein Shell-Skript, das bei Fehlern einfach weiterläuft, ist gefährlich. Mit set -euo pipefail und einem sauberen Grundgerüst bricht dein Skript beim ersten Problem sicher ab.