Ինչպե՞ս եք աշխատում ասինխրոն JavaScript-ով։
sobes.tech AI
Պատասխան AI-ից
Ես աշխատում եմ ասինխրոնությամբ JavaScript-ում օգտագործելով callback-ներ, promise-ներ և async/await:
Callback-ները ֆունկցիաներ են, որոնք փոխանցվում են այլ ֆունկցիաների որպես արգումենտներ և կատարվում են որոշակի օպերացիայի ավարտից հետո: Նրանք կարող են հանգեցնել "տանջալի callback-ների" երբ նեղվում են:
// Callback-ի օրինակ
function fetchData(callback) {
setTimeout(() => {
callback("Տվյալները ստացվել են");
}, 1000);
}
fetchData((data) => {
console.log(data); // Տպում է "Տվյալները ստացվել են" 1 վայրկյանի ընթացքում
});
Promise-ները օբյեկտներ են, որոնք ներկայացնում են ասինխրոն օպերացիայի վերջնական ավարտը կամ անհաջողությունը: Նրանք հեշտացնում են ասինխրոն կոդի աշխատանքը, թույլ են տալիս խուսափել խորացված նեղումից: Ունեն երեք վիճակ՝ pending (սպասում), fulfilled (հաջող ավարտ), rejected (բացառված):
// Promise-ի օրինակ
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 նշված ֆունկցիան միշտ վերադարձնում է promise: await օպերատորը կարող է օգտագործվել միայն async ֆունկցիայի ներսում և կանգնեցնում է կատարմանը մինչև promise-ը կատարվի կամ մերժվի:
// 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-ը՝ հասկանալու համար ասինխրոն կոդի կատարման կարգը, microtasks-ները և macrotasks-ները։