Middle
Jaka jest zaleta składniowego cukru przedstawionego w formie async/await w porównaniu do Promise?
sobes.tech AI
Odpowiedź od AI
Główną zaletą async/await w porównaniu do "czystych" obietnic jest możliwość pisania kodu asynchronicznego w bardziej synchronicznym i czytelnym stylu.
Porównanie:
| Aspekt | Promise |
async/await |
|---|---|---|
| Czytelność | Może prowadzić do "łańcuchów obietnic". | Pozwala pisać kod prawie jak synchroniczny. |
| Obsługa błędów | Używa .catch(). |
Używa standardowego try...catch. |
| Sekwencyjność | Wymaga ostrożnego łańcuchowania lub Promise.all. |
Jasne i łatwe do odczytania. |
| Debugowanie | Może być trudniejsze do śledzenia. | Zbliżone do debugowania kodu synchronicznego. |
| Szum składniowy | Dużo .then(), .catch(). |
Mniejsza ilość boilerplate'u. |
Przykład z obietnicami:
// Przykład z Promise
fetch('user.json')
.then(response => response.json())
.then(user => fetch(`https://api.github.com/users/${user.name}`))
.then(githubUser => githubUser.json())
.then(githubUser => {
// Przetwarzanie danych
console.log(githubUser);
})
.catch(error => {
console.error('Błąd:', error);
});
Przykład z async/await:
// Przykład z async/await
async function getUserData() {
try {
const userResponse = await fetch('user.json');
const user = await userResponse.json();
const githubResponse = await fetch(`https://api.github.com/users/${user.name}`);
const githubUser = await githubResponse.json();
// Przetwarzanie danych
console.log(githubUser);
} catch (error) {
console.error('Błąd:', error);
}
}
getUserData();
Tak więc, async/await nie zastępuje obietnic, lecz jest ich składniowym cukrem, czyniąc operacje asynchroniczne bardziej intuicyjnymi i łatwymi w utrzymaniu.