In dieser Lektion lernst du, wie JavaScript mit zeitlich verzögerten Abläufen umgeht. Asynchrones JavaScript ist entscheidend für reale Anwendungen: Netzwerkanfragen, Timer, Benutzerinteraktionen und Hintergrundprozesse würden ohne Asynchronität die gesamte Seite blockieren.
// Gedankenexperiment: blockiert die Seite
function longTask() {
let start = Date.now();
while (Date.now() - start < 5000) {}
console.log("Fertig");
}
longTask();
console.log("Das kommt erst danach");
longTask läuft, reagiert die Seite nicht mehr.
Genau das verhindert asynchrones JavaScript.
Vereinfacht:
setTimeout führt eine Funktion nach einer bestimmten Zeit aus
(asynchron).
console.log("Start");
setTimeout(() => {
console.log("Nach 2 Sekunden");
}, 2000);
console.log("Ende");
setTimeout blockiert nicht.
function doSomethingLater(callback) {
setTimeout(() => {
callback("Fertig!");
}, 1000);
}
doSomethingLater(message => {
console.log(message);
});
step1(() => {
step2(() => {
step3(() => {
console.log("Done");
});
});
});
Ein Promise hat drei Zustände:
pending — läuftfulfilled — erfolgreichrejected — fehlgeschlagenconst promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Erfolg!");
}, 1000);
});
promise.then(result => {
console.log(result);
});
promise
.then(result => console.log(result))
.catch(error => console.error(error));
fetchData()
.then(data => processData(data))
.then(result => console.log(result))
.catch(err => console.error(err));
then gibt wieder ein Promise zurück.
async und await sind Syntax-Zucker
für Promises und machen asynchronen Code lesbar wie synchronen.
async function loadData() {
const result = await promise;
console.log(result);
}
loadData();
async function load() {
try {
const data = await fetchData();
console.log(data);
} catch (err) {
console.error(err);
}
}
await darf nur innerhalb von async-Funktionen verwendet werden.
const a = await taskA();
const b = await taskB();
const [a, b] = await Promise.all([
taskA(),
taskB()
]);
await außerhalb von asynccatch bei PromisessetTimeout exakt zeitgenau istsetTimeout nach 3 Sekunden eine Nachricht aus.
async/await um
und fange Fehler sauber ab.