Junior
Na czym polega różnica między async/await a Promise?
sobes.tech AI
Odpowiedź od AI
async/await to składniowy cukier nad obietnicami. Pozwala pisać kod asynchroniczny w bardziej czytelny, synchroniczny styl, używając słów kluczowych async dla funkcji zawierających await, aby oczekiwać na rozwiązanie obietnicy. Obietnice to obiekty reprezentujące końcowe zakończenie (lub niepowodzenie) operacji asynchronicznej i jej wynikową wartość.
| Cecha | async/await | Promise |
|---|---|---|
| Składnia | Bardziej przypomina kod synchroniczny. | Używa metod .then(), .catch(), .finally(). |
| Czytelność | Zazwyczaj wyższa, szczególnie przy łańcuchach. | Może prowadzić do "Callback hell" przy złożonych łańcuchach. |
| Obsługa błędów | Używa standardowego try...catch. |
Używa .catch() lub drugiego argumentu w .then(). |
| Paralelizm | Wymaga jawnego użycia Promise.all() lub Promise.allSettled(). |
Może być bardziej jawny, ale mniej czytelny bez async/await. |
// Przykład z Promise
function getDataPromise() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Dane otrzymane');
}, 1000);
});
}
getDataPromise()
.then(data => {
console.log(data);
})
.catch(error => {
console.error(error);
});
// Przykład z async/await
async function getDataAsync() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Dane otrzymane');
}, 1000);
});
}
async function processData() {
try {
const data = await getDataAsync();
console.log(data);
} catch (error) {
console.error(error);
}
}
processData();