Sobes.tech
Middle

Ispričaj mi o principima asinhronosti u JavaScriptu.

sobes.tech АИ

Одговор од АИ

Principi asinhronosti u JavaScript-u zasnivaju se na modelu izvršavanja sa jednim thread-om, gde zadaci koji mogu trajati duže vreme (npr. mrežni zahtevi, tajmeri) ne blokiraju glavni tok izvršavanja, omogućavajući izvršavanje drugih radnji. To se postiže pomoću:

  • Event Loop (Petlja događaja): Mehanizam koji stalno proverava red poruka i izvršava zadatke iz njega. Kada asinhrona operacija završi, njen callback se stavlja u red zadataka.
  • Callback funkcije: Funkcije koje se prosleđuju kao argumenti drugim funkcijama i izvršavaju nakon završetka asinhrone operacije.
  • Promises (Obećanja): Objekti koji predstavljaju krajnju vrednost asinhrone operacije, koja može biti uspešna (fulfilled) ili odbačena (rejected). Olakšavaju rad sa asinhronim kodom, izbegavajući "callback hell".
  • Async/Await: Sintaktički šećer nad promises, koji omogućava pisanje asinhronog koda u čitljivijem, sinhronom stilu. Funkcije označene sa async uvek vraćaju promise. Operator await može da se koristi samo unutar async funkcija i zaustavlja izvršenje dok se promise ne reši.

Poređenje pristupa:

Pristup Čitljivost Obrada grešaka Paralelno izvršavanje
Callbacks Niska Složena Može biti ne-trivijalno
Promises Srednja Pogodna .all(), .race()
Async/Await Visoka Pogodna (try/catch) Malo složenije

Primer korišćenja promises:

fetch('/api/data') // Asinhrona operacija
  .then(response => response.json()) // Uspešno rukovanje
  .then(data => console.log(data)) // Obrada podataka
  .catch(error => console.error('Greška:', error)); // Obrada greške

Primer korišćenja Async/Await:

async function fetchData() {
  try {
    const response = await fetch('/api/data'); // Čekanje promise
    const data = await response.json(); // Čekanje promise
    console.log(data);
  } catch (error) {
    console.error('Greška:', error); // Obrada greške
  }
}
fetchData();