Async و Await در جاوا اسکریپت؛ مفهوم + کاربرد
Async و Await در جاوا اسکریپت یک ویژگی است که به برنامهنویس این امکان را میدهد تا کد ناهمگام (Asynchronous) به شیوهای بهتر کار کند. درواقع، Async در جاوا اسکریپت این امکان را به شما میدهد که کدهای ناهمگام را خیلی راحتتر بنویسید و آنها را درک کنید. توابع Async همیشه یک Promise برمیگردانند. کلیدواژه Await نیز همیشه با تابعهای Async بهکار میرود. اگر میخواهید بدانید که دقیقاً Async await چیست و با نحوه عملکرد آن بهتر آشنا شوید، از شما دعوت میشود تا انتهای این راهنما با ما همراه باشید.
آموزش await async در جاوا اسکریپت
یک کافیشاپ بزرگ را در نظر بگیرید که تنها یک نفر مسئولیت آماده کردن سفارشها را برعهده دارد. باریستا باید یکییکی سفارشها را آماده کند و سر میز مشتری ببرد. طبیعتاً چنین روندی برای یک کافیشاپ بزرگ بسیار کند است و نارضایتی مشتریان را در پی دارد. این مثال را میتوان به Async و Await در جاوا اسکریپت یا ناهمگامی یا ناهمزمانی تعمیم داد. در کافیشاپ باریستا به یک استاد چندوظیفه تبدیل میشود که باید انواع قهوه را به طور همزمان سرو کند و به صورت دورهای پیشرفت در نحوه دمآوری قهوه را مورد بررسی قرار میدهد.
چنین رویکردی تضمین میکند که تمامی سفارشهای قهوه به سرعت آماده میشود و در پی آن مشتریان نیز رضایت کامل خواهند داشت. از کافیشاپ برگردیم به دنیای برنامه نویسی؛ تکنیکهایی مثل مفهوم async وجود دارد که با کمک آن میتوانیم چندین کار را به صورت همزمان با کیفیت عالی انجام دهیم.
Async و Await در جاوا اسکریپت اجازه میدهد تا سایر کدهایی که در انتظار تکمیل کار موردنظر هستند، به صورت همزمان اجرا شوند. Javascript یک زبان تکرشتهای است؛ بهاین معنا که وظایف غیرهمزمان به کمک صف برگشتی و حلقه رویداد قابل مدیریت هستند. به کمک این قابلیت توابع به صورت متوالی و یکی بعد از دیگری اجرا میشوند و هر یک منتظر پایان یافتن عملیات قبلی هستند تا برای اجرا به عملیات بعدی بروند. ازاینرو، کدها در جاوااسکریپت از بالا به پایین به صورت خطی اجرا خواهند شد.
با درک مفهوم async در جاوا اسکریپت شما میتوانید کدهای promises-based ناهمگام را بهگونهای بنویسید که بتوانند به صورت همزمان اجرا شوند؛ بدوناینکه اختلالی در روند انجام کار پیش آید. تابع async همیشه یک مقدار مشخص را برمیگرداند و آن مقدار Promises هستند.
async function myFunction() { return "Hello"; }
در ادامه یک مثال ساده از Async و Await در جاوا اسکریپت خواهیم داشت:
const getData = async () => { let data = "Hello World" ; return data; } getData().then(data => console.log(data)); |
خروجی به صورت زیر است:
Hello World
در مثال بالا یک تابع غیرهمگام getData با استفاده از سینتکس یا نحوه نوشتار تابع پیکان (arrow function) به همراه کلیدواژه async نمایش داده شده است. درون این تابع یک متغیر با مقدار رشتهای “Hello World” نوشته شده است. سپس، تابع این مقدار را برمیگرداند.
کلیدواژه Await
این کلیدواژه بهاین دلیل مورد استفاده قرار میگیرد تا منتظر Promise در جاوا اسکریپت بماند. درواقع، باعث میشود که بلوک کد منتظر بماند تا مقدار promise یک نتیجه را برگرداند.
let value = await promise;
مثال زیر کاربرد ساده Await در جاوا اسکریپت را نمایش میدهد:
const getData = async () => {
let y = await
"Hello World"
;
console.log(y);
}
console.log(1);
getData();
console.log(2);
خروجی:
1 2 Hello World
در مثال بالا یک تابع غیرهمگام getData با استفاده از سینتکس یا نحوه نوشتار توابع پیکان تعریف شده است که از کلیدواژه Async و Await در جاوا اسکریپت استفاده میکند. درون این تابع یک await تعریف شده است که اجرای کدهای درون تابع تا زمانی که promise برگردد یا اصطلاحاً return شود را متوقف خواهد کرد. مقداری که در اجرای آن توقف موقت ایجاد شده است، مقدار رشتهای “Hello World” است که یک promise نیست. اما به دلیل عملکرد و وظیفهای که Async function دارد، بلافاصله برمیگردد و همچون یک پرامیس عمل میکند.
مثالهایی از Async و Await در جاوا اسکریپت
در مثال زیر ما چند promise را در یک متد اجرا کردیم و آن متد درنهایت نتیجهای که میخواهیم را نمایش میدهد:
function asynchronous_operational_method() { let first_promise = new Promise((resolve, reject) => resolve( "Hello" )); let second_promise = new Promise((resolve, reject) => { setTimeout(() => { resolve( " GeeksforGeeks.." ); }, 1000); }); let combined_promise = Promise.all([first_promise, second_promise]); return combined_promise; } async function display() { let data = await asynchronous_operational_method(); console.log(data); } display(); |
خروجی:
[ 'Hello', ' GeeksforGeeks..' ]
در این مثال ابتدا دو promise ساخته شده است. یکی از آنها بلافاصله مقدار Hello را برمیگرداند و دیگری پس از یک ثانیه مقدار GeeksforGeeks… سپس، متد Promise.all() هردو پرامیس را به یک پرامیس واحد تبدیل میکند. تابع display() به عنوان یک async ظاهر میشود و حاوی عملیات asynchronous است. در قدم بعدی، کلیدواژه await اجرای عملیات را متوقف میکند تا combined_promise (دو وعدهای که به یک واحد تبدیل شده بودند) حل شود. در نهایت، آرایهای از پرامیسهای واحد در کنسول نمایش داده میشود.
پیشنهاد مطالعه: آموزش Var در جاوا اسکریپت به زبان ساده
متدهای مدیریت وعده یا پرامیس در جاوا اسکریپت
متدهای کنترلکننده وعده ابزاری ضروری برای برقراری ارتباط بین توابع اجرایی و مصرفکننده هستند. با استفاده از این متدها از همگامسازی زمانی که یک پرامیس حل یا رد میشود، اطمینان حاصل خواهد شد. متدهای مذکور کنترلکننده عملیات غیرهمزمان هستند که با کپسوله کردن دادهها در شی به جای برگرداندن نوعی مقدار، این فرایند را آسان خواهند کرد.
در ادامه با این متدها آشنا خواهیم شد:
- .then(): این متد به شما اجازه میدهد تا مشخص کنید زمانی که وعده با موفقیت حل شد، چه اقدامی باید صورت بگیرد. متد .then() نوعی تابع callback برای رسیدگی به مقداری که با موفقیت حل شده برمیگرداند. کاربر میتواند پس از تحقق وعده، اجرای برنامه را ادامه دهد.
- .catch: متد بعدی که باید در Async و Await در جاوا اسکریپت بشناسید، .catch است. زمانی که یک پرامیس با خطا مواجه میشود، این متد به کاربر امکان میدهد با استفاده از راهبردهای مدیریت خطا و بازیابی به توابع رد یا rejection رسیدگی کند.
- .finally(): این متد برای تعیین اقداماتی که باید صرفنظر از اینکه وعده حل یا رد شده است، مورد استفاده قرار میگیرد. بهطور معمول از این متد برای انجام پاکسازی که باید بدون توجه به نتیجه وعده صورت بگیرد، استفاده خواهد شد.
- .all(): وظیفه این متد ایجاد یک وعده واحد است. این وعده فقط زمانی حل میشود که تمام پرامیسهای آرایهای خاص با موفقیت انجام شده باشند. درواقع، این متد زمانی مفید است که پیش از ادامه اجرا باید منتظر بمانیم تا چند عمل غیرهمگام تکمیل شوند.
- .race(): این متد یک نوع وعده ایجاد میکند و بهمحض حل یا رد شدن، یکی از وعدههای آرایه حل یا رد خواهد شد. زمانی که کاربر بخواهد بلافاصله بعد از تکمیل هر یک از عملیاتهای غیرهمگام، اجرای برنامه ادامه پیدا کند مورد استفاده قرار میگیرد.
نکته! این متدهای کنترلکننده برای ساختاردهی و مدیریت کدهای غیرهمگام کارایی دارند و به شما اجازه میدهند تا برنامههایی سازمانیافتهتر، پاسخگوتر و کارآمدتر بنویسید.
پیشنهاد مطالعه: Const در جاوا اسکریپت: نگهبان مقادیر شما در دنیای متغیر
سخن پایانی:
Async و Await در جاوا اسکریپت، ابزارهای قدرتمندی هستند که برنامهنویسی ناهمگام را سادهتر و خواناتر میکنند. با استفاده از async، توابع میتوانند به صورت ناهمگام عمل کنند و همیشه یک Promise برمیگردانند. Await به کد اجازه میدهد تا منتظر تکمیل یک Promise بماند، بدون آنکه مسدود شود.
این تکنیکها به برنامهها امکان میدهند که وظایف متعدد را به صورت همزمان انجام دهند، مشابه یک باریستا که چندین قهوه را به طور همزمان آماده میکند که این امر سرعت و کارایی را بهبود میبخشد. در نتیجه، Async و Await ابزارهای اساسی در جاوا اسکریپت هستند که به توسعهدهندگان کمک میکنند تا کدهای ناهمگام را به شکلی مؤثرتر مدیریت کنند.
آموزش جاوا اسکریپت در مکتب خونه
دنیای برنامهنویسی بزرگتر از آن چیزی است که فکرش را کنید! در این دنیای گسترده زبانهای مختلفی روی کار آمدهاند که بدون شک جاوا اسکریپت یکی از پرچمداران است. چراکه کاربردهای فراوانی دارد و میتوان با کمک این زبان چالشبرانگیز و شیرین برنامههای مختلفی در محیط وب، دستکتاپ، موبایل، بازی و غیره نوشت. جاوااسکریپت پُر از مفاهیم کلیدی و کاربردی است که هر برنامهنویسی که با این زبان کار میکند باید مهمترینِ آنها را بشناسد. یکی از این مفاهیم Async و Await در جاوا اسکریپت است.
اگر علاقمند به کسب اطلاعات بیشتر پیرامون زبان جاوا اسکریپت و همچنین تکمیل اطلاعات خود درباره آموزش async await در پایتون و غیره هستید، از شما دعوت میشود سری به دورههای آموزش Javascript و آموزش برنامه نویسی در مکتب خونه بزنید.
رفرنس: geeksforgeeks