Middle
Kokia yra sintaksinio cukraus, pateikto async/await formoje, pranašumas lyginant su Promise?
sobes.tech AI
Atsakymas iš AI
Pagrindinis async/await pranašumas prieš "grynus" pažadus yra galimybė rašyti asinchroninį kodą labiau sinchroniniu ir skaitomu stiliumi.
Palyginimas:
| Aspektas | Promise |
async/await |
|---|---|---|
| Skaitymas | Gali sukelti "Promise grandines". | Leidžia rašyti kodą beveik kaip sinchroninį. |
| Klaidos apdorojimas | Naudoja .catch(). |
Naudoja standartinį try...catch. |
| Sekos aiškumas | Reikalauja atidžiai sujungti arba Promise.all. |
Aiškus ir lengvai skaitomas. |
| Derinimas | Gali būti sudėtingiau sekti srautą. | Artimas sinchroninio kodo derinimui. |
| Sintaksės triukšmas | Daug .then(), .catch(). |
Mažiau boilerplate kodo. |
Pavyzdys su pažadais:
// Pavyzdys su Promise
fetch('user.json')
.then(response => response.json())
.then(user => fetch(`https://api.github.com/users/${user.name}`))
.then(githubUser => githubUser.json())
.then(githubUser => {
// Duomenų apdorojimas
console.log(githubUser);
})
.catch(error => {
console.error('Klaida:', error);
});
Pavyzdys su async/await:
// Pavyzdys su 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();
// Duomenų apdorojimas
console.log(githubUser);
} catch (error) {
console.error('Klaida:', error);
}
}
getUserData();
Taigi, async/await nepakeičia pažadų, o yra jų sintaksinis cukrus, darantis asinchronines operacijas labiau intuityvias ir lengviau palaikomas.