Synchroner Code wird Schritt für Schritt ausgeführt.
Asynchroner Code erlaubt es, auf langsame Operationen zu warten, ohne das Programm zu blockieren.
Ein Promise steht für einen Wert, der jetzt noch nicht verfügbar ist.
const promise = new Promise((resolve, reject) => {
resolve("Fertig!");
});
promise.then(result => {
console.log(result);
});
then wird ausgeführt, wenn das Promise erfolgreich ist.
const promise = new Promise((resolve, reject) => {
reject("Etwas ist schiefgelaufen");
});
promise
.then(result => console.log(result))
.catch(error => console.error(error));
const addAsync = (a,b) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
if(isNaN(a) || isNaN(b)) {
reject('Error: a or b is not a Number!');
} else {
resolve(a + b);
}
}, 1000);
})
}
console.log("Before");
addAsync(3, 4).then(res => {
console.log(`It worked! The result is: ${res}`);
}).catch(err => {
console.log(`An error occured: ${err}`);
});
console.log("After");
Promises funktionieren, sind aber oft schwer lesbar.
async / await macht asynchronen Code lesbarer.
async function loadData() {
return "Daten geladen";
}
Eine async-Funktion gibt immer ein Promise zurück.
async function example() {
const result = await promise;
console.log(result);
}
await pausiert die Funktion, nicht das gesamte Programm.
async function example() {
try {
const result = await promise;
console.log(result);
} catch (error) {
console.error(error);
}
}