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
asyncuvek vraćaju promise. Operatorawaitmože da se koristi samo unutarasyncfunkcija 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();