Promises և async/await JavaScript-ում
ինչպես են աշխատում Promises-ները, ինչու է async/await-ն ավելի ընթեռնելի
JavaScript-ում որոշ գործողություններ կատարվում են ոչ թե միանգամից (սինխրոն), այլ որոշ ժամանակ հետո (ասինխրոն), օրինակ՝ տվյալ ստանալ սերվերից կամ սպասել որևէ պատասխան։ Այսպիսի գործողությունների համար մենք օգտագործում ենք Promises և async/await։
Այս հոդվածում կտեսնենք՝ ինչպես են աշխատում Promises-ները, ինչու է async/await-ն ավելի ընթեռնելի, և ինչպես են դրանք օգնում քեզ գրել ավելի լավ, մաքուր կոդ։
Promise-ը խոստում է․ «Ես քեզ կասեմ արդյունքը, երբ պատրաստ լինի։ Կամ հաջողությամբ, կամ սխալով»։
Promise-ը ունի 3 վիճակ՝
const myPromise = new Promise((resolve, reject) => {
let success = true;
if (success) {
resolve("Everything went well!");
} else {
reject("Something went wrong.");
}
});
myPromise
.then(result => console.log("✅", result))
.catch(error => console.error("❌", error));
Սա ասում է՝ երբ խոստումը հաջողվի, then-ը կաշխատի, իսկ եթե սխալ լինի՝ catch-ը։
Երբ fetch-ով տվյալք ես ստանում API-ից, այն վերադարձնում է Promise։
fetch("https://jsonplaceholder.typicode.com/users")
.then(response => response.json())
.then(data => console.log("📦 Data:", data))
.catch(error => console.error("⚠️ Error:", error));
Դիտարկիր՝ ինչպես կարող ենք մի քանի then() միացնել իրար։ Բայց սա երբեմն դառնում է կարդալու համար դժվար։ Այստեղ է գալիս async/await-ը։
async/await-ը մի պարզ ու նոր գրելաաձև է Promise-ների համար։ Այն կոդը դարձնում է ավելի կարդացվող՝ կարծես սինխրոն է, բայց իրականում ասինխրոն է։
async function getUsers() {
try {
const response = await fetch("https://jsonplaceholder.typicode.com/users");
const data = await response.json();
console.log("👥 Users:", data);
} catch (error) {
console.error("🚨 Error fetching users:", error);
}
}
getUsers();
await-ը սպասում է, մինչև գործողությունն ավարտվի, իսկ try/catch բլոկը թույլ է տալիս բռնել սխալները։
function wait(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function demo() {
console.log("⏳ Սպասում եմ...");
await wait(2000);
console.log("✅ 2 վայրկյան անցավ");
}
demo();
Սա ցույց է տալիս՝ ինչպես կարող ես await-ով իրականացնել ամեն ինչ՝ նույնիսկ փոքր սպասման մեխանիզմ։
Երբ միաժամանակ մի քանի async գործողություն ունես, կարող ես օգտագործել Promise.all
կամ Promise.race
։
const promise1 = wait(1000).then(() => "First done");
const promise2 = wait(2000).then(() => "Second done");
Promise.all([promise1, promise2])
.then(results => console.log("✅ All done:", results));
Promise.all()
սպասում է, մինչև բոլորն ավարտվենPromise.race()
վերադարձնում է ամենարագըPromise-ները JavaScript-ում հիմնական եղանակն են՝ async գործողություններ կատարելու համար։ async/await-ը թույլ է տալիս Promise-ները գրել ավելի պարզ ու ընթեռնելի ձևով։
Այս բոլորի ճիշտ օգտագործումը կդարձնի կոդդ ավելի մաքուր, կանխատեսելի և ժամանակակից։