Middle
Խոսիր ինձ մասին JavaScript-ում ասինխրոնության սկզբունքների մասին։
sobes.tech AI
Պատասխան AI-ից
JavaScript- ում անսինխրոնության սկզբունքները հիմնված են մեկ թելային կատարման մոդելին, որտեղ այն առաջադրանքները, որոնք կարող են տևել երկար ժամանակ (օրինակ՝ ցանցային հարցումներ, ժամացույցներ), չեն խափանում հիմնական կատարման թելը, ինչը թույլ է տալիս կատարել այլ գործողություններ: Դա հասնում է հետևյալով.
- Event Loop (Իրադարձությունների ցիկլ): մեխանիզմ, որը մշտապես ստուգում է հաղորդագրությունների հերթը և կատարում է նրանից առաջադրանքները: Երբ անսինխրոնային օպերացիան ավարտվում է, նրա callback-ը դրվում է առաջադրանքների հերթում:
- Callback Functions (Հետադարձ կանչման ֆունկցիաներ): ֆունկցիաներ, որոնք փոխանցվում են որպես արգումենտ այլ ֆունկցիայի և կատարվում են անսինխրոնային օպերացիայի ավարտից հետո:
- Promises (Համոզմունքներ): օբյեկտներ, որոնք ներկայացնում են անսինխրոնային օպերացիայի վերջնական արժեքը, որը կարող է լինել կամ հաջողությամբ կատարված (resolved), կամ մերժված (rejected): Դրանք հեշտացնում են անսինխրոնային կոդի աշխատանքը, թույլ տալով խուսափել "callback hell"-ից:
- Async/Await: սինտաքսիկ շաքար promises-ի վրա, որը թույլ է տալիս գրել ավելի ընթեռնելի, սինխրոն ոճով անսինխրոնային կոդ:
asyncնշված ֆունկցիաները միշտ վերադարձնում են promises, իսկawaitօպերատորը կարող է օգտագործվել միայնasyncֆունկցիաների ներսում և կանգնեցնում է կատարմանը մինչև 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();