Sobes.tech
Middle

Kuidas te töötate asünkroonse JavaScriptiga?

sobes.tech AI

Vastus AI-lt

Ma töötan asünkroonsusega JavaScriptis, kasutades callback'e, promise'e ja async/await'i.

Callback'id on funktsioonid, mida edastatakse teistele funktsioonidele argumentidena ja täidetakse pärast teatud operatsiooni lõppu. Need võivad põhjustada "põrgu callback'e" sügava sissepääsu korral.

// Callback näide
function fetchData(callback) {
  setTimeout(() => {
    callback("Andmed saadud");
  }, 1000);
}

fetchData((data) => {
  console.log(data); // Kuvab "Andmed saadud" pärast 1 sekundit
});

Promise'id on objektid, mis esindavad asünkroonse operatsiooni lõplikku lõpetamist või ebaõnnestumist. Need lihtsustavad asünkroonse koodi töötlemist, võimaldades vältida sügavat sissepääsu. Neil on kolm olekut: pending (ootamine), fulfilled (õnnestunud), rejected (tagasilükkamine).

// Promise näide
function fetchDataPromise() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Andmed saadud");
    }, 1000);
  });
}

fetchDataPromise()
  .then((data) => {
    console.log(data); // Kuvab "Andmed saadud" pärast 1 sekundit
  })
  .catch((error) => {
    console.error("Viga:", error);
  });

Async/await on sünteksisuhkur promis'e üle, mis muudab asünkroonse koodi loetavamaks, sarnanedes sünkroneeritu. Funktsioon, millele on märgistus async, tagastab alati promise'i. await operaatorit saab kasutada ainult async funktsiooni sees ja see peatab täitmise kuni promise on täidetud või tagasi lükatud:

// Async/await näide
async function fetchDataAsync() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Andmed saadud");
    }, 1000);
  });
}

async function processData() {
  try {
    const data = await fetchDataAsync();
    console.log(data); // Kuvab "Andmed saadud" pärast 1 sekundit
  } catch (error) {
    console.error("Viga:", error);
  }
}

processData();

Sageli kasutan async/await API päringutega töötamisel, kuna see on kõige mugavam ja loetavam viis asünkroonsete operatsioonide töötlemiseks. Kui on vaja teha mitu asünkroonset operatsiooni paralleelselt, kasutan Promise.all() või Promise.allSettled().

Kasutan event loop'i, et mõista asünkroonse koodi täitmise järjekorda, mikroülesandeid ja makroülesandeid.