{
“@context”: “https://schema.org”,
“@type”: “TechArticle”,
“headline”: “JavaScript Async Await vs. Promise Then: Vollständiger Leitfaden mit echten Beispielen”,
“description”: “Verstehen Sie die Syntax von async/await vs. Promise.then, wann Sie sie verwenden sollten und welche häufigen Fallstricke es gibt, anhand von Codebeispielen, die alle realen Muster abdecken.”,
“url”: “https://techpulsesite.com/javascript-async-await-vs-promise-then-c-de/”,
“datePublished”: “2026-06-24T16:20:00+00:00”,
“dateModified”: “2026-06-29T04:14:50+00:00”,
“author”: {
“@type”: “Organization”,
“name”: “TechPulse Editorial Team”,
“url”: “https://techpulsesite.com”
},
“publisher”: {
“@type”: “Organization”,
“name”: “TechPulse”,
“url”: “https://techpulsesite.com”
},
“inLanguage”: “de”
}
{
“@context”: “https://schema.org”,
“@type”: “TechArticle”,
“headline”: “JavaScript Async Await vs. Promise Then: Vollständiger Leitfaden mit echten Beispielen”,
“description”: “Verstehen Sie die Syntax von async/await vs. Promise.then, wann Sie sie verwenden sollten und welche häufigen Fallstricke es gibt, anhand von Codebeispielen, die alle realen Muster abdecken.”,
“url”: “https://techpulsesite.com/javascript-async-await-vs-promise-then-c-de/”,
“datePublished”: “2026-06-24T16:20:00+00:00”,
“dateModified”: “2026-06-21T05:56:25+00:00”,
“author”: {
“@type”: “Organization”,
“name”: “TechPulse Editorial Team”,
“url”: “https://techpulsesite.com”
},
“publisher”: {
“@type”: “Organization”,
“name”: “TechPulse”,
“url”: “https://techpulsesite.com”
},
“inLanguage”: “de”
}
JavaScriptsasynchron/warten undPromise.then() Beide verarbeiten asynchrone Vorgänge – sie haben jedoch unterschiedliche Stärken, unterschiedliche Lesbarkeitsprofile und unterschiedliche Fehlerbehandlungsmuster. In diesem Leitfaden wird anhand realer Codebeispiele erläutert, wann die einzelnen Elemente verwendet werden sollten.
📋 Table of Contents
Welches Problem lösen wir?
JavaScript ist Single-Threaded, verarbeitet E/A jedoch asynchron. Ohne die Möglichkeit, auf asynchrone Vorgänge zu „warten“, kämen Sie in die Hölle der Rückrufe – verschachtelte Funktionen, die nicht gelesen und verwaltet werden können. Versprechen haben das gelöst. async/await ließ es synchron aussehen. Beides ist unbedingt zu verstehen.
Promise.then() Syntax
// Basic promise chain
fetch('https://api.example.com/users')
.then(response => response.json())
.then(users => {
console.log(users);
return fetch(`/api/posts/${users[0].id}`);
})
.then(response => response.json())
.then(posts => console.log(posts))
.catch(error => console.error('Error:', error))
.finally(() => console.log('Done'));
Versprechensketten sind für einfache lineare Flüsse lesbar. Jeder.then() erhält den aufgelösten Wert aus dem vorherigen Schritt.
async/await-Syntax
// Same logic with async/await
async function fetchUserPosts() {
try {
const userResponse = await fetch('https://api.example.com/users');
const users = await userResponse.json();
const postsResponse = await fetch(`/api/posts/${users[0].id}`);
const posts = await postsResponse.json();
console.log(posts);
} catch (error) {
console.error('Error:', error);
} finally {
console.log('Done');
}
}
fetchUserPosts();
async/await Verwendet reguläres Try/Catch für Fehler und liest von oben nach unten wie synchroner Code – viel einfacher zu befolgen für komplexe Logik.
Nebeneinander: Was ist besser lesbar?
| Szenario | Promise.then() | asynchron/warten | Gewinner |
|---|---|---|---|
| Einzelner asynchroner Aufruf | Sauber | Benötigt asynchrone Funktion | Krawatte |
| Sequentielle Operationen | Kette wird lang | Liest sich natürlich | asynchron/warten |
| Paralleloperationen | Promise.all() natürlich | Brauche auch Promise.all() | Krawatte |
| Fehlerbehandlung | .catch() einfach | Vertrautes versuchen/fangen | Krawatte |
| Bedingte Logik | Unordentliches Inneres .then() | Reguläres if/else funktioniert | asynchron/warten |
| Debuggen | Stack-Traces schwieriger | Bessere Stack-Traces | asynchron/warten |
Parallele Ausführung von Vorgängen
// WRONG: These run sequentially (slow)
async function slowFetch() {
const users = await fetchUsers(); // waits 500ms
const posts = await fetchPosts(); // then waits 500ms = 1000ms total
}
// RIGHT: Run in parallel with Promise.all
async function fastFetch() {
const [users, posts] = await Promise.all([
fetchUsers(), // both start at same time
fetchPosts() // total: ~500ms
]);
return { users, posts };
}
// Promise.then() approach for parallel:
Promise.all([fetchUsers(), fetchPosts()])
.then(([users, posts]) => ({ users, posts }))
.catch(console.error);
Fehlerbehandlungsmuster
// async/await: catch specific errors
async function getUser(id) {
try {
const response = await fetch(`/api/users/${id}`);
if (!response.ok) {
throw new Error(`HTTP error: ${response.status}`);
}
return await response.json();
} catch (error) {
if (error.message.includes('HTTP error: 404')) {
return null; // user not found
}
throw error; // rethrow unexpected errors
}
}
// Promise.then(): chain error catching
fetch(`/api/users/${id}`)
.then(response => {
if (!response.ok) throw new Error(`HTTP ${response.status}`);
return response.json();
})
.catch(error => {
if (error.message.includes('404')) return null;
throw error;
});
Häufige Fehler, die es zu vermeiden gilt
- Vergessen warten:
const data = fetch(url)gibt Ihnen ein Promise-Objekt, nicht die Daten. ImmerawaitEs. - Warten Sie in .then(): Sie können
awaitnicht verwenden innerhalb eines regulären Rückrufs. Markieren Sie den Rückruf alsasync. - Seriell statt parallel: Sequentielle
awaitAufrufe, wenn Operationen unabhängig sind. Verwenden SiePromise.all(). - Fehlerbehandlung vergessen: Nicht abgefangene Ablehnungen von Versprechungen bringen Node.js-Prozesse zum Absturz und zeigen rote Fehler in Browsern an.
- Blockieren der Ereignisschleife:
awaitunterbricht die Funktion, nicht den gesamten Thread. Anderer Code wird weiterhin ausgeführt.
Reales Muster: API-Serviceklasse
class ApiService {
constructor(baseUrl) {
this.baseUrl = baseUrl;
}
async request(endpoint, options = {}) {
const response = await fetch(`${this.baseUrl}${endpoint}`, {
headers: { 'Content-Type': 'application/json', ...options.headers },
...options
});
if (!response.ok) throw new Error(`API Error: ${response.status}`);
return response.json();
}
async getUser(id) { return this.request(`/users/${id}`); }
async createPost(data) { return this.request('/posts', { method: 'POST', body: JSON.stringify(data) }); }
async updatePost(id, data) { return this.request(`/posts/${id}`, { method: 'PUT', body: JSON.stringify(data) }); }
}
Häufig gestellte Fragen
F: Ist async/await nur syntaktischer Zucker über Versprechen?
A: Ja. Unter der Haubeasync Funktionen geben Promises undawaitzurück Pausiert die Ausführung, bis das Versprechen aufgelöst wird. In älteren Umgebungen werden sie zum gleichen Ergebnis kompiliert.
F: Kann ich async/await und .then() in derselben Codebasis mischen?
A: Ja, und manchmal ist es angemessen. Eine Dienstprogrammfunktion könnte ein Promise zurückgeben; Eine Komponente verwendet async/await, um sie aufzurufen. Seien Sie innerhalb der Funktionen konsistent.
F: Funktioniert Async/Await im Jahr 2026 in allen Browsern?
A: Ja. Alle modernen Browser unterstützen async/await nativ. Keine Transpilierung erforderlich, es sei denn, Sie unterstützen IE11 (was im Jahr 2026 nicht der Fall sein sollte).
F: Was ist mit asynchronen Generatoren für Streaming?
A: for await...of mit asynchronen Generatoren eignet sich hervorragend für die Verarbeitung von Streaming-Antworten. Verwenden Sie es mit dem ReadableStream der Fetch-API für Chunked-Daten.
F: Was soll ich Anfängern beibringen?
A: Bringen Sie zuerst Promise-Konzepte bei, damit sie verstehen, was passiert, und lehren Sie dann Async/Await als bevorzugte Syntax. Das Verständnis von Promises erleichtert das Debuggen von Async/Await erheblich.
Fazit
Im Jahr 2026async/await ist die Standardauswahl für neuen Code – er ist besser lesbar, einfacher zu debuggen und funktioniert natürlich mit Try/Catch. Verwenden SiePromise.then() wenn die Verkettung sauberer ist (einfache Transformationen) oder wenn Sie eine feinkörnige Steuerung wiePromise.race()benötigen undPromise.allSettled(). Beide Fähigkeiten sind erforderlich – die Beherrschung von asynchronem JavaScript ist für jeden modernen JavaScript-Entwickler nicht verhandelbar.
🔗 Share this article
✍️ Leave a Comment