Асинхрон JavaScript менен кантип иштейсиз?
sobes.tech AI
AIден жооп
Мен JavaScriptте асинхрондуулук менен иштөө үчүн коллбэкдерди, промисстерди жана async/await колдонуп жатам:
Коллбэкдер — бул башка функцияларга аргумент катары берилген жана белгилүү бир операциянын аяктоосунан кийин ишке ашкан функциялар. Алар "жаман коллбэкдер" болуп калышы мүмкүн, эгер тереңдете турган болсок.
// Коллбэк мисалы
function fetchData(callback) {
setTimeout(() => {
callback("Маалыматтар алынды");
}, 1000);
}
fetchData((data) => {
console.log(data); // 1 секунддан кийин "Маалыматтар алынды" чыгат
});
Промисстер — бул асинхрондуу операциянын аяктоо же ишке ашпоо жагдайын көрсөтүүчү объекттер. Алар асинхрондуу код менен иштөөнү жеңилдетет, терең кирүүдө кыйынчылыкка алып келбейт. Үч абалы бар: pending (күтүү), fulfilled (жакшы аяктоо), rejected (жана болбошу).
// Промис мисалы
function fetchDataPromise() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Маалыматтар алынды");
}, 1000);
});
}
fetchDataPromise()
.then((data) => {
console.log(data); // 1 секунддан кийин "Маалыматтар алынды" чыгат
})
.catch((error) => {
console.error("Ката:", error);
});
Async/await — бул промисстердин үстүндө синтаксистик шекер, ал асинхрондуу кодду окууга жеңилдетет, синхронго окшош кылат. async белгиленген функция ар дайым промис кайтарат. await оператору гана async функциясынын ичинде колдонулуп, промис ишке ашканга чейин күтөт:
// Async/await мисалы
async function fetchDataAsync() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Маалыматтар алынды");
}, 1000);
});
}
async function processData() {
try {
const data = await fetchDataAsync();
console.log(data); // 1 секунддан кийин "Маалыматтар алынды" чыгат
} catch (error) {
console.error("Ката:", error);
}
}
processData();
Көп учурда async/await API суроолору менен иштөөдө колдонуп жатам, анткени бул эң ыңгайлуу жана окумдуу ыкма. Бир нече асинхрондуу операцияны параллел жүргүзүү үчүн Promise.all() же Promise.allSettled() колдонуп жатам.
Event loop аркылуу асинхрон коддун аткаруу тартибин, микротасктарды жана макротасктарды түшүнүп жатам.