Middle
JavaScriptте асинхрондуулук принциптери жөнүндө мага айтып бер.
sobes.tech AI
AIден жооп
JavaScriptтеги асинхрондуулук принциптери бир тилдүү иштөө моделине негизделген, анда узак убакыт алчу иштери (мисалы, тармактык суроолор, таймерлер) негизги иштөө агымын блоктебейт, бул башка аракеттерди аткарууга мүмкүндүк берет. Бул төмөнкүлөр аркылуу жетишилет:
- Event Loop (Окуялар цикли): Механизм, ал үзгүлтүксүз билдирүү кезегин текшерет жана анын ичинен тапшырмаларды аткарат. Асынырган операция аяктагандан кийин, анын callbackи тапшырмалар кезегине коюлат.
- Callback Functions (Кайталап чакыруучу функциялар): Башка функциянын аргумент катары берилген жана асинхрондук операция аяктагандан кийин ишке ашырылуучу функциялар.
- Promises (Убада): Асынырган операциянын акыркы маанисин көрсөтүүчү объекттер, ал же ийгиликтүү аткарылат (resolved), же четке кагылат (rejected). Алар асинхрондук код менен иштөөнү жеңилдетет, "callback hell" дегенден качууга мүмкүндүк берет.
- Async/Await: promises үстүндөгү синтаксистик шекер, ал окуу оңой, синхрон стилине жакын асинхрондук код жазууга мүмкүндүк берет.
asyncбелгиленген функциялар ар дайым promises кайтарат, ал эмиawaitоператоры only insideasyncfunctions колдонулат жана 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();