Sobes.tech
Middle

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.