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 операторы only inside async functions колдонулат жана 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();