Cum lucrezi cu JavaScript asincron?
sobes.tech AI
Răspuns de la AI
Lucrez cu asincronia în JavaScript folosind callback-uri, promisiuni și async/await.
Callback-urile sunt funcții transmise altor funcții ca argumente și sunt executate după finalizarea unei operații. Pot duce la "iadul callback-urilor" atunci când sunt înglobate.
// Exemplu de callback
function fetchData(callback) {
setTimeout(() => {
callback("Datele au fost primite");
}, 1000);
}
fetchData((data) => {
console.log(data); // Va afișa "Datele au fost primite" după 1 secundă
});
Promisiunile sunt obiecte care reprezintă finalizarea sau eșecul unei operații asincrone. Fac mai ușor lucrul cu codul asincron, evitând imbricările profunde. Au trei stări: pending (în așteptare), fulfilled (îndeplinit), rejected (respins).
// Exemplu de promisiune
function fetchDataPromise() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Datele au fost primite");
}, 1000);
});
}
fetchDataPromise()
.then((data) => {
console.log(data); // Va afișa "Datele au fost primite" după 1 secundă
})
.catch((error) => {
console.error("Eroare:", error);
});
Async/await este zahăr sintactic peste promisiuni care face codul asincron mai lizibil, asemănător cu cel sincron. O funcție marcată cu async întotdeauna returnează o promisiune. Operatorul await poate fi folosit doar în interiorul funcțiilor async și suspendă execuția până când promisiunea este rezolvată sau respinsă.
// Exemplu de async/await
async function fetchDataAsync() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Datele au fost primite");
}, 1000);
});
}
async function processData() {
try {
const data = await fetchDataAsync();
console.log(data); // Va afișa "Datele au fost primite" după 1 secundă
} catch (error) {
console.error("Eroare:", error);
}
}
processData();
Adesea folosesc async/await când lucrez cu cereri API, deoarece este cel mai convenabil și lizibil mod de a gestiona operațiuni asincrone. Pentru executarea paralelă a mai multor operațiuni asincrone, folosesc Promise.all() sau Promise.allSettled().
Utilizez event loop-ul pentru a înțelege ordinea de execuție a codului asincron, microtask-urilor și macrotask-urilor.