Middle
Ko jūs labāk vēlaties izmantot: async/await vai send?
sobes.tech AI
Atbilde no AI
Es dod pieprasījumu izmantot async/await.
Priekšrocības:
- Lasāmība: Kods izskatās kā sinhrons, kas ievērojami atvieglo loģikas saprašanu, īpaši strādājot ar vairākiem asinhroniem procesiem.
- Callback hell novēršana: Izvairās no callback funkciju dziļas iekļaušanas, kas var padarīt kodu grūti lasāmu un uzturamu.
- Ērta kļūdu apstrāde: Var izmantot standarta
try...catchblokus kļūdu apstrādei. - Labāka trešo pušu rīku atbalsts:
async/awaitar asinhrono kodu bieži ir ērtāka analīzei un atkļūdošanai.
send metode (iespējams XMLHttpRequest vai <form> objekta send) tiek izmantota datu sūtīšanai, bet pati par sevi nav asinhronības pārvaldības mehānisms. send rezultāts parasti tiek apstrādāts ar notikumiem (onload, onerror utt.), kas noved pie callback orientētas struktūras.
Ar async/await ir dabiskāk strādāt ar API, piemēram, fetch:
// Piemērs ar async/await
async function fetchData(url) {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP kļūda: ${response.status}`);
}
const data = await response.json();
return data;
} catch (error) {
console.error("Kļūda, saņemot datus:", error);
throw error;
}
}
// Izmantošana
fetchData("https://api.example.com/data")
.then(data => {
console.log("Saņemtie dati:", data);
})
.catch(error => {
console.error("Datu apstrādes kļūda:", error);
});
Salīdzinājums ar XMLHttpRequest un notikumu apstrādi:
// Ar XMLHttpRequest un notikumiem
function fetchDataXHR(url, callback) {
const xhr = new XMLHttpRequest();
xhr.open("GET", url, true); // true padara pieprasījumu asinhronu
xhr.onload = function() {
if (xhr.status >= 200 && xhr.status < 300) {
try {
const data = JSON.parse(xhr.responseText);
callback(null, data);
} catch (error) {
callback(error, null);
}
} else {
callback(new Error(`HTTP kļūda: ${xhr.status}`), null);
}
};
xhr.onerror = function() {
callback(new Error("Tīkla kļūda"), null); // tīkla kļūda
};
xhr.send(); // sūtīt pieprasījumu
}
// Izmantošana
fetchDataXHR("https://api.example.com/data", function(error, data) {
if (error) {
console.error("Kļūda, saņemot datus:", error);
} else {
console.log("Saņemtie dati:", data);
}
});
Ir skaidrs, ka async/await versija ir kodu īsāka un lasāmāka.