Sobes.tech
Middle

როგორ მუშაობთ ასინქრონულ JavaScript-თან?

sobes.tech AI

პასუხი AI-სგან

მე ვმუშაობ ასინქრონულობით JavaScript-ში გამოყენებით callback-ების, promise-ების და async/await-ის:

Callback-ები — ეს ფუნქციებია, რომლებიც გადაეცემა სხვა ფუნქციებს როგორც არგუმენტები და შესრულდება გარკვეული ოპერაციის დასრულების შემდეგ. ისინი შეიძლება გამოიწვიოს "ჯოჯოხეთის callback-ები" თუ ძალიან ჩახლართულია.

// Callback-ის მაგალითი
function fetchData(callback) {
  setTimeout(() => {
    callback("მონაცემები მიღებულია");
  }, 1000);
}

fetchData((data) => {
  console.log(data); // გამოიტანს "მონაცემები მიღებულია" 1 წამში
});

Promise-ები — ეს ობიექტებია, რომლებიც წარმოადგენენ ასინქრონული ოპერაციის საბოლოო დასრულებას ან გაუქმებას. ისინი ამარტივებენ ასინქრონული კოდის მუშაობას, აცილებს ღრმა ნაგვის შექმნას. აქვთ სამი მდგომარეობა: pending (მოსალოდნელი), fulfilled (შესრულებულია წარმატებით), rejected (უარყოფილია).

// Promise-ის მაგალითი
function fetchDataPromise() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("მონაცემები მიღებულია");
    }, 1000);
  });
}

fetchDataPromise()
  .then((data) => {
    console.log(data); // გამოიტანს "მონაცემები მიღებულია" 1 წამში
  })
  .catch((error) => {
    console.error("შეცდომა:", error);
  });

Async/await — ეს სინტაქსური შაქარია, რომელიც ასინქრონული კოდს უფრო წასაკითხს ხდის, მსგავსს სინქრონულს. async-ით მონიშნული ფუნქცია ყოველთვის აბრუნებს promise-ს. ოპერატორი await შეიძლება გამოყენებულ იქნას მხოლოდ async ფუნქციის შიგნით და აჩერებს შესრულებას მანამ, სანამ promise არ შესრულდება ან უარყოფილი იქნება:

// Async/await-ის მაგალითი
async function fetchDataAsync() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("მონაცემები მიღებულია");
    }, 1000);
  });
}

async function processData() {
  try {
    const data = await fetchDataAsync();
    console.log(data); // გამოიტანს "მონაცემები მიღებულია" 1 წამში
  } catch (error) {
    console.error("შეცდომა:", error);
  }
}

processData();

ხშირად ვიყენებ async/await API-ს მოთხოვნებთან მუშაობისას, რადგან ეს ყველაზე მოსახერხებელი და წასაკითხია გზაა ასინქრონული ოპერაციების დამუშავებისთვის. საჭიროების შემთხვევაში, ერთდროულად რამდენიმე ასინქრონული ოპერაციის შესრულებისთვის ვიყენებ Promise.all() ან Promise.allSettled()-ს.

გამოყენებEvent loop-ს ასინქრონული კოდის შესრულების წესის, მიკროტასკებისა და მაკროტასკების გასაგებად.