Sobes.tech
Middle

მითხარი JavaScript-ში ასინქრონულობის პრინციპებზე.

sobes.tech AI

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

JavaScript-ში ასინქრონული პრინციპები ეფუძნება ერთთრიან მოდელს, სადაც დროის დიდი ხნით გასატარებელი ამოცანები (მაგალითად, ქსელური მოთხოვნები, ტაიმერები) არ ბლოკავს ძირითად შესრულების ნაკადს, რაც საშუალებას აძლევს სხვა მოქმედებების შესრულებას. ეს მიღწეულია შემდეგით:

  • Event Loop (საგარეჯო ციკლი): მექანიზმი, რომელიც მუდმივად შემოწმებს შეტყობინებების რიგს და ასრულებს მისგან ამოცანებს. როდესაც ასინქრონული ოპერაცია დასრულდება, მისი callback-ი მოთავსდება ამოცანების რიგში.
  • Callback Functions (უკანასკნელი ფუნქციები): ფუნქციები, რომლებიც გადაეცემა სხვა ფუნქციის არგუმენტად და შესრულდება ასინქრონული ოპერაციის დასრულების შემდეგ.
  • Promises (პირობები): ობიექტები, რომლებიც წარმოადგენენ ასინქრონული ოპერაციის საბოლოო მნიშვნელობას, რომელიც შეიძლება იყოს წარმატებით შესრულებული (resolved) ან უარყოფილი (rejected). ისინი ამარტივებენ ასინქრონული კოდის მუშაობას, თავიდან აცილების მიზნით "callback hell"-ს.
  • Async/Await: სინტაქსური შაქარი promises-ის ზედა, რომელიც საშუალებას აძლევს დაწეროთ უფრო წაკითხვადი, სინქრონული სტილით ასინქრონული კოდი. async აღნიშნული ფუნქციები ყოველთვის აბრუნებს promises-ს. ოპერატორი await შეიძლება გამოყენებულ იქნას მხოლოდ async ფუნქციების შიგნით და აჩერებს შესრულებას მანამ, სანამ promise არ შესრულდება.

შედარება მიდგომების:

მიდგომა წაკითხვადობა შეცდომების მართვა პარალელური შესრულება
Callbacks დაბალი რთული შეიძლება იყოს რთული
Promises საშუალო მოსახერხებელი .all(), .race()
Async/Await მაღალი მოსახერხებელი (try/catch) ცოტა უფრო რთული

მაგალითი promises-ის გამოყენების:

fetch('/api/data') // ასინქრონული ოპერაცია
  .then(response => response.json()) // წარმატებული შესრულების დამუშავება
  .then(data => console.log(data)) // მონაცემების დამუშავება
  .catch(error => console.error('შეცდომა:', error)); // შეცდომის დამუშავება

მაგალითი Async/Await-ის გამოყენების:

async function fetchData() {
  try {
    const response = await fetch('/api/data'); // ველოდებით promise-ს
    const data = await response.json(); // ველოდებით promise-ს
    console.log(data);
  } catch (error) {
    console.error('შეცდომა:', error); // შეცდომის დამუშავება
  }
}
fetchData();