پێشەکییەک بۆ Async و Await
لە جاڤاسکریپتدا، زۆرێک لە کردارەکان وەک خوێندنەوەی داتا لە سێرڤەر یان کارکردن لەگەڵ فایلەکان بە شێوەی ئاسینکرۆن (Asynchronous) ئەنجام دەدرێن. پێشتر ئێمە Promises-مان بەکاردەهێنا، بەڵام لەگەڵ هاتنی ES2017، شێوازێکی نوێ و ئاسانتر بە ناوی Async/Await ناسێندرا.
وشەی کلیلەی Async
کاتێک وشەی async لە پێش فەنکشنێک دادەنێین، ئەو فەنکشنە هەمیشە بەڵێنێک (Promise) دەگەڕێنێتەوە. ئەگەر بەهایەکیش بگەڕێنیتەوە کە Promise نەبێت، جاڤاسکریپت خۆکارانە دەیخاتە ناو Promise-ێکەوە.
async function sayHello() {
return "سڵاو لە جیهانی جاڤاسکریپت!";
}
sayHello().then(alert);
لە نموونەکەدا، فەنکشنەکە بەهایەکی سادە دەگەڕێنێتەوە، بەڵام بەهۆی async، ئەنجامەکە لە ڕێگەی .then() دەتوانرێت بەدەست بهێنرێت.
وشەی کلیلەی Await
وشەی await تەنها لەناو فەنکشنێکدا کاردەکات کە async بێت. کاری ئەم وشەیە وەستاندنی جێبەجێکردنی فەنکشنەکەیە تا ئەو کاتەی بەڵێنەکە (Promise) تەواو دەبێت.
async function showData() {
let promise = new Promise((resolve) => {
setTimeout(() => resolve("داتاکە بە سەرکەوتوویی هات!"), 2000);
});
let result = await promise; // لێرەدا کۆدەکە بۆ ماوەی ٢ چرکە دەوەستێت
console.log(result);
}
showData();
لێرەدا، کۆدەکە چاوەڕێی تەواوبوونی promise دەکات پێش ئەوەی بچێتە سەر هێڵی داهاتوو. ئەمە ڕێگە لە ئاڵۆزییەکانی زنجیرەیی .then() دەگرێت.
مامەڵەکردن لەگەڵ هەڵەکان (Error Handling)
لە کاتی بەکارهێنانی await، باشترین ڕێگا بۆ گرتنی هەڵەکان بەکارهێنانی try...catch-ە. ئەمە هاوشێوەی بەکارهێنانی .catch()-ە لە Promise-دا.
async function getData() {
try {
let response = await fetch('https://api.example.com/data');
let data = await response.json();
console.log(data);
} catch (error) {
console.error("هەڵەیەک ڕوویدا: ", error);
}
}
getData();
ئەگەر هەر کێشەیەک لە کاتی پەیوەندیکردن بە سێرڤەرەوە ڕووبدات، کۆدەکە دەچێتە بەشی catch و هەڵەکە نیشان دەدات.
تێبینییە گرنگەکان
await لە دەرەوەی فەنکشنێکی async بەکارمەهێنە، چونکە ئەمە دەبێتە هۆی هەڵەی Syntax. هەروەها، بەکارهێنانی await لەناو forEach-دا بە باشی کار ناکات، بۆیە باشترە for...of بەکاربهێنیت.سوودەکانی بەکارهێنانی Async/Await
- خوێندنەوەی کۆد زۆر ئاسانترە و وەک کۆدی ئاسایی دەردەکەوێت.
- دیاریکردنی هەڵەکان (Debugging) ئاسانترە بەهۆی
try/catch. - کەمکردنەوەی ئاڵۆزییەکانی Promise Chaining.
ڕاهێنان
ئێستا کاتی ئەوەیە خۆت تاقی بکەیتەوە! فەنکشنێک بنووسە بە ناوی delayedLog کە وشەیەک وەربگرێت و دوای ١ چرکە لە ڕێگەی setTimeout و await-ەوە لە کۆنسۆڵ چاپ بکات.