Asynchrone Programmierung in JavaScript: Vollständiger Leitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten
```html

Einführung in die asynchrone Programmierung in JavaScript



JavaScript ist eine Single-Thread-Sprache mit einer nicht-blockierenden Ereignisschleife (Event Loop). Das bedeutet, dass zu einem bestimmten Zeitpunkt nur eine Operation ausgeführt wird, aber dank der Asynchronität müssen wir nicht auf den Abschluss langsamer Aufgaben (Dateilesen, API-Anfrage, Timer) warten, sondern können mit der Ausführung anderem Codes fortfahren. In diesem Artikel werden wir alle Schlüsselkonzepte der asynchronen Programmierung in der Node.js-Umgebung behandeln, von Callbacks bis zur modernen async/await-Syntax.



Asynchrone Programmierung ermöglicht die Erstellung leistungsstarker Serveranwendungen, die Tausende von Anfragen verarbeiten, ohne den Hauptthread zu blockieren. Das Verständnis dieses Paradigmas ist eine unverzichtbare Fähigkeit für jeden JavaScript-Entwickler.



1. Callback-Funktionen und das Problem Callback Hell



Historisch gesehen war der erste Mechanismus für Asynchronität in JavaScript der Callback – eine Funktion, die nach Abschluss einer asynchronen Operation aufgerufen wird.



Beispiel eines einfachen Callbacks



const fs = require('fs');

// Asynchrones Lesen einer Dateifs.readFile('example.txt', 'utf8', (err, data) => { if (err) { console.error('Lesefehler:', err); return; } console.log('Dateiinhalt:', data);});

console.log('Diese Nachricht erscheint vor dem Dateiinhalt');


Das Problem tritt auf, wenn mehrere aufeinanderfolgende asynchrone Operationen ausgeführt werden müssen. Die Verschachtelung der Callbacks wächst und der Code wird unlesbar – dieses Phänomen nennt man "Callback Hell" oder "Hölle der Callbacks".



Beispiel für Callback Hell



fs.readFile('file1.txt', (err, data1) => {    if (err) throw err;    fs.readFile('file2.txt', (err, data2) => {        if (err) throw err;        fs.readFile('file3.txt', (err, data3) => {            if (err) throw err;            // Verarbeitung aller drei Dateien            console.log(data1 + data2 + data3);        });    });});


Dieser Code ist schwer zu warten, zu testen und zu debuggen. Die Lösung dieses Problems kam mit dem Aufkommen von Promise.



2. Promise: Befreiung von Callback Hell



Promise (Versprechen) ist ein Objekt, das das Ergebnis einer asynchronen Operation darstellt: erfolgreiche Ausführung (resolve) oder Fehler (reject). Promise ermöglicht es, Aufrufketten zu bilden, wodurch der Code flacher und lesbarer wird.



Erstellung und Verwendung von Promise



// Funktion, die ein Promise zurückgibtconst readFilePromise = (filename) => {    return new Promise((resolve, reject) => {        fs.readFile(filename, 'utf8', (err, data) => {            if (err) reject(err);            else resolve(data);        });    });};

// VerwendungreadFilePromise('file1.txt') .then(data => { console.log('Datei gelesen:', data); return readFilePromise('file2.txt'); }) .then(data => { console.log('Zweite Datei:', data); }) .catch(err => { console.error('Fehler:', err); });


Methoden Promise.all und Promise.race



Für die parallele Ausführung mehrerer asynchroner Operationen gibt es nützliche statische Methoden:



  • Promise.all() – wartet auf die Erfüllung aller Promises. Wenn mindestens eines mit einem Fehler endet, wechselt das gesamte Promise.all in den Zustand rejected.
  • Promise.race() – gibt das Ergebnis des ersten abgeschlossenen Promises zurück (Erfolg oder Fehler).
  • Promise.allSettled() – wartet auf den Abschluss aller Promises und gibt die Ergebnisse jedes einzelnen zurück (Erfolg oder Fehler).


const promise1 = readFilePromise('file1.txt');const promise2 = readFilePromise('file2.txt');const promise3 = readFilePromise('file3.txt');

Promise.all([promise1, promise2, promise3]) .then(results => { console.log('Alle Dateien gelesen:', results); }) .catch(err ```

Blogs

Buchempfehlungen