Sobes.tech
Middle

Papaskink apie asinchroniškumo principus JavaScript'e.

sobes.tech AI

Atsakymas iš AI

Asinchroninio principai JavaScript pagrįsti viengubo srauto vykdymo modeliui, kur užduotys, kurios gali užtrukti ilgai (pavyzdžiui, tinklo užklausos, laikmačiai), neblokuoja pagrindinio vykdymo srauto, leidžiant vykdyti kitus veiksmus. Tai pasiekiama naudojant:

  • Event Loop (Įvykių ciklas): mechanizmas, kuris nuolat tikrina žinučių eilę ir vykdo iš jos užduotis. Kai asinchroninė operacija baigiasi, jos callbackas įdedamas į užduočių eilę.
  • Callback Functions (Kreipimosi funkcijos): funkcijos, kurios perduodamos kaip argumento kitai funkcijai ir vykdomos po asinchroninės operacijos pabaigos.
  • Promises (Pasižadėjimai): objektai, kurie atstovauja galutinę asinchroninės operacijos reikšmę, kuri gali būti sėkmingai įvykdyta (resolved) arba atmesta (rejected). Jie palengvina darbą su asinchroniniu kodu, leidžiant išvengti "callback hell".
  • Async/Await: sintaksinis cukrus virš promises, leidžiantis rašyti labiau skaitomą, sinchroninį stilių asinchroniniam kodui. Funkcijos, pažymėtos async, visada grąžina promise. Operatorius await gali būti naudojamas tik async funkcijų viduje ir sustabdo vykdymą iki promise įvykdymo.

Palyginimas:

Požiūris Skaitymo patogumas Klaidos tvarkymas Paralele vykdymas
Callbacks Žemas Sudėtingas Gali būti sudėtinga
Promises Vidutinis Patogu .all(), .race()
Async/Await Aukštas Patogu (try/catch) Šiek tiek sudėtingiau

Pavyzdys naudojant promises:

fetch('/api/data') // Asinchroninė operacija
  .then(response => response.json()) // Sėkmingo vykdymo apdorojimas
  .then(data => console.log(data)) // Duomenų apdorojimas
  .catch(error => console.error('Klaida:', error)); // Klaidos apdorojimas

Pavyzdys naudojant Async/Await:

async function fetchData() {
  try {
    const response = await fetch('/api/data'); // Laukiama promise
    const data = await response.json(); // Laukiama promise
    console.log(data);
  } catch (error) {
    console.error('Klaida:', error); // Klaidos apdorojimas
  }
}
fetchData();