Middle
Šta više volite da koristite: async/await ili send?
sobes.tech АИ
Одговор од АИ
Preferiram da koristim async/await.
Prednosti:
- Čitljivost: Kod izgleda kao sinhroni, što znatno olakšava razumevanje logike, posebno pri radu sa više asinhronih operacija.
- Izbegavanje callback hell: Izbegava ugnježdene callbackove, koji mogu učiniti kod teško čitljivim i održivim.
- Prijatno rukovanje greškama: Može se koristiti standardni blok
try...catchza rukovanje greškama u asinhronom kodu. - Bolja podrška spoljašnjih alata: Debugging i profilisanje asinhronog koda sa
async/awaitje često prikladnije.
Metod send (verovatno se odnosi na metod send objekta XMLHttpRequest ili <form>) koristi se za slanje podataka, ali sam po sebi nije mehanizam za upravljanje asinhronošću. Rezultat zahteva korišćenjem send obično se obrađuje putem događaja (onload, onerror itd.), što dovodi do strukture koda orijentisane na callbackove.
Sa async/await interakcija sa asinhronim API-jevima, poput fetch, postaje prirodnija.
// Primer sa async/await
async function fetchData(url) {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP greška: ${response.status}`);
}
const data = await response.json();
return data;
} catch (error) {
console.error("Greška pri dobijanju podataka:", error);
throw error; // Prebacivanje greške na viši nivo
}
}
// Korišćenje asinhrone funkcije
fetchData("https://api.example.com/data")
.then(data => {
console.log("Dobijeni podaci:", data);
})
.catch(error => {
console.error("Greška pri obradi podataka:", error);
});
Upoređenje sa XMLHttpRequest i obradom putem događaja:
// Primer sa XMLHttpRequest i događajima (analogno korišćenju send)
function fetchDataXHR(url, callback) {
const xhr = new XMLHttpRequest();
xhr.open("GET", url, true); // true čini zahtev asinhronim
xhr.onload = function() {
if (xhr.status >= 200 && xhr.status < 300) {
try {
const data = JSON.parse(xhr.responseText);
callback(null, data); // prosleđivanje podataka u callback
} catch (error) {
callback(error, null); // greška pri parsiranju JSON
}
} else {
callback(new Error(`HTTP greška: ${xhr.status}`), null); // HTTP greška
}
};
xhr.onerror = function() {
callback(new Error("Mrežna greška"), null); // mrežna greška
};
xhr.send(); // slanje zahteva
}
// Korišćenje callback funkcije
fetchDataXHR("https://api.example.com/data", function(error, data) {
if (error) {
console.error("Greška pri dobijanju podataka:", error);
} else {
console.log("Dobijeni podaci:", data);
}
});
Očigledno je da je verzija sa async/await kompaktnija i lakše čitljiva.