Repräsentieren zukünftige Werte Kapseln asynchrone Operationen mit Erfolgs- oder Fehlerzustand.
Promise states
- Erstellt ein Promise mit einer asynchronen Entscheidung.
- Je nach Ergebnis wird es erfüllt (resolved) oder abgelehnt (rejected).
.then()reagiert auf Erfolg oder Fehler des Promises.
const promise = new Promise((resolve, reject) => {
const res = true;
// An asynchronous operation.
if (res) {
resolve('Resolved!');
} else {
reject(Error('Error'));
}
});
promise.then(
(res) => console.log(res),
(err) => console.error(err)
);Executor function
- Die Executor-Funktion wird sofort beim Erstellen des Promises ausgeführt.
- Sie entscheidet, wann
resolveoderrejectaufgerufen wird. - Steuert den Zustand des Promises.
const executorFn = (resolve, reject) => {
resolve('Resolved!');
};
const promise = new Promise(executorFn);setTimeout()
- Verzögert die Ausführung einer Funktion um eine bestimmte Zeit.
- Blockiert den Hauptthread nicht.
- Wird häufig genutzt, um asynchrones Verhalten zu simulieren.
const loginAlert = () => {
console.log('Login');
};
setTimeout(loginAlert, 6000);.then() method
- Verarbeitet das Ergebnis eines erfüllten Promises.
- Wird erst ausgeführt, wenn
resolveaufgerufen wurde. - Kann auch einen Fehler-Handler enthalten.
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Result');
}, 200);
});
promise.then(
(res) => {
console.log(res);
},
(err) => {
console.error(err);
}
);Promise.catch()
- Fängt Fehler aus einem Promise oder einer vorherigen
.then()-Kette ab. - Sorgt für saubere Fehlerbehandlung bei abgelehnten Promises.
- Trennt Erfolgs- und Fehlerlogik klar.
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
reject(Error('Promise Rejected Unconditionally.'));
}, 1000);
});
promise.then((res) => {
console.log(value);
});
promise.catch((err) => {
console.error(err);
});Promise.all()
- Führt mehrere Promises parallel aus.
- Gibt ein Ergebnis erst zurück, wenn alle erfolgreich sind.
- Schlägt sofort fehl, wenn ein Promise rejected wird.
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(3);
}, 300);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(2);
}, 200);
});
Promise.all([promise1, promise2]).then((res) => {
console.log(res[0]);
console.log(res[1]);
});Promise.allSettled()
- Wartet auf alle Promises, unabhängig von Erfolg oder Fehler.
- Liefert für jedes Promise den Endzustand (
fulfilledoderrejected). - Nützlich, wenn alle Ergebnisse ausgewertet werden müssen.
const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
reject(2);
}, 100);
});
Promise.allSettled([promise1, promise2]).then((res) => {
console.log(res[0].status);
console.log(res[1].status);
});Avoiding nested Promise and .then()
- Vermeidet verschachtelte
.then()-Aufrufe. - Jedes
.then()gibt einen neuen Wert zurück. - Führt zu besser lesbarem und wartbarem Code (Promise-Chaining).
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('*');
}, 1000);
});
const twoStars = (star) => {
return star + star;
};
const oneDot = (star) => {
return star + '.';
};
const print = (val) => {
console.log(val);
};
// Chaining them all together
promise.then(twoStars).then(oneDot).then(print);Creating
- Beim Erstellen eines Promises wird die Executor-Funktion sofort ausgeführt.
- Noch kein asynchroner Ablauf, nur Initialisierung.
- Nützlich für Setup- oder Debug-Zwecke.
const executorFn = (resolve, reject) => {
console.log('The executor function of the promise!');
};
const promise = new Promise(executorFn);Chaining multiple .then()
- Mehrere
.then()werden nacheinander ausgeführt. - Jeder Schritt kann ein neues Promise zurückgeben.
- Fehler werden automatisch an den nächsten Fehler-Handler weitergereicht.
const promise = new Promise((resolve) =>
setTimeout(() => resolve('dAlan'), 100)
);
promise
.then((res) => {
return res === 'Alan'
? Promise.resolve('Hey Alan!')
: Promise.reject('Who are you?');
})
.then(
(res) => {
console.log(res);
},
(err) => {
console.error(err);
}
);Fake http Request with Promise
- Simuliert einen asynchronen Netzwerkrequest.
resolvesteht für eine erfolgreiche Antwort,rejectfür einen Fehler.async/awaitsorgt für lesbaren, synchron wirkenden Code mit Fehlerbehandlung übertry/catch.
const mock = (success, timeout = 1000) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (success) {
resolve({ status: 200, data: {} });
} else {
reject({ message: 'Error' });
}
}, timeout);
});
};
const someEvent = async () => {
try {
await mock(true, 1000);
} catch (e) {
console.log(e.message);
}
};