Sobes.tech
Middle

Kā jūs strādājat ar asinhrono JavaScript?

sobes.tech AI

Atbilde no AI

Es darbā ar asenhroniju JavaScript izmantoju callback funkcijas, promises un async/await.

Callback funkcijas ir funkcijas, kuras tiek nodotas citām funkcijām kā arguments un tiek izpildītas pēc noteiktas operācijas pabeigšanas. Tās var novest pie "velnišķīgiem callback" dziļas iekļaušanas gadījumā.

// Callback piemērs
function fetchData(callback) {
  setTimeout(() => {
    callback("Dati saņemti");
  }, 1000);
}

fetchData((data) => {
  console.log(data); // Izvadīs "Dati saņemti" pēc 1 sekundes
});

Promises ir objekti, kas pārstāv galīgo asinhronas operācijas pabeigšanu vai neveiksmi. Tie atvieglo darbu ar asinhrono kodu, ļauj izvairīties no dziļas iekļaušanas. Tie ir trīs stāvokļi: pending (gaida), fulfilled (veiksmīgi pabeigts), rejected (atsakās).

// Promise piemērs
function fetchDataPromise() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Dati saņemti");
    }, 1000);
  });
}

fetchDataPromise()
  .then((data) => {
    console.log(data); // Izvadīs "Dati saņemti" pēc 1 sekundes
  })
  .catch((error) => {
    console.error("Kļūda:", error);
  });

Async/await ir sintaktisks cukurs virs promises, kas padara asinhrono kodu lasāmāku, līdzīgu sinhronam. Funkcija, kas ir marķēta ar async, vienmēr atgriež promise. Operators await var tikt izmantots tikai async funkcijas iekšienē un pārtrauc izpildi līdz promises ir izpildīts vai noraidīts:

// Async/await piemērs
async function fetchDataAsync() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Dati saņemti");
    }, 1000);
  });
}

async function processData() {
  try {
    const data = await fetchDataAsync();
    console.log(data); // Izvadīs "Dati saņemti" pēc 1 sekundes
  } catch (error) {
    console.error("Kļūda:", error);
  }
}

processData();

Bieži izmantoju async/await darbā ar API pieprasījumiem, jo tas ir ērtākais un lasāmākais veids, kā apstrādāt asinhronas operācijas. Ja nepieciešams veikt vairākas asinhronas operācijas paralēli, izmantoju Promise.all() vai Promise.allSettled().

Izmantoju event loop, lai saprastu asinhrona koda izpildes kārtību, mikro uzdevumus un makro uzdevumus.