როგორ მუშაობთ ასინქრონულ 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-ს ასინქრონული კოდის შესრულების წესის, მიკროტასკებისა და მაკროტასკების გასაგებად.