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 Snippets
toSorted, toReversed und with: Arrays sortieren, ohne das Original zu zerstören
array.sort() sortiert nicht eine Kopie, sondern das Array selbst – und genau daran ist schon mancher Zustand im Frontend stillschweigend kaputtgegangen. Seit ES2023 gibt es zu jeder dieser Methoden eine Variante, die eine Kopie zurückgibt.
Aufzählungen richtig verketten mit Intl.ListFormat
"a, b und c" von Hand zusammenzubauen geht fast immer schief – bei einem Element, bei zwei Elementen, beim letzten Komma. Intl.ListFormat macht es richtig, in jeder Sprache, ganz ohne Bibliothek.
requestAnimationFrame – die Animationsschleife, die zum Bildschirm passt
setInterval(schritt, 16) läuft auf einem 144-Hz-Monitor anders als auf einem alten Handy – und im Hintergrundtab einfach weiter. requestAnimationFrame löst beides, wenn man die verstrichene Zeit mitrechnet statt Bilder zu zählen.