Async/Await چیست؟

آموزش

توابع Async اساسا یک روش برای کارکردن با کدهای غیرهمزمان  در جاوا اسکریپت است.برای درک این که این توابع واقعا چه هستند و چگونه کار میکنند ابتدا باید Promise ها را به خوبی درک کنیم.اگر نمیدونید Promise ها چی هستند پیشنهاد میکنم مقاله اشنایی با Promise در جاوااسکریپت را مطالعه کنید.تا زمانی که Promise رو درک نکنید نمی تونید  مفهوم Async/Await  رو درک کنید.

  • جدیدترین روش نوشتن کدهای غیرهمزمان در جاوااسکریپت
  • غیرقابل انسداد است (درست شبیه Promise و Callback)
  • Async/Await برای ساده سازی روند کار و نوشتن Promise های زنجیره ای طراحی شده است.
  • توابع Async یک Promise رو برمیگردونن. اگر تابع یک خطا رو برمیگردونه،Promise رد شده و اگر تابع یک مقدار رو برمیگردونه Promise پذیرفته شده.

Syntax

نوشتن توابع async بسیار ساده است . کافیه که شما کلمه کلیدی async رو قبل از function اضافه کنید

 

Await

توابع Async میتوانند از کلیدواژه Await استفاده کنند.این کار توابع Async  را متوقف میکند و منتظر  اجرای دستور بازگشتی می ماند.

برای درک همه این ها اجازه بدهید که کار را با یک مثال ادامه بدهیم. ابتدا قصد داریم یک کد را با استفاده از Promise ها ایجاد کنیم سپس این کدها را با استفاده از async بازنویسی کنیم تا ببینیم که چقدر کارمان ساده تر شده است.

کد زیر را درنظر بگیرید:

در این کد ما یک تابع به نام doubleAfter2Seconds  تعریف کردیم. این تابع یک عدد را به عنوان ورودی میگیرد و بعد از 2 ثانیه مقدار آن را دوبرابر میکند.ما میتونیم تابع رو فراخوانی کنیم و این تابع رو با مقدار 10 تست کنیم.سپس بعد از اینکه Promise به طور کامل resolve شد،ما مقدار برگشتی را در کنسول log میکنیم. به قطعه کد زیر توجه کنید

اما اگه ما بخوایم تابع رو چندین مرتبه با مقادیر مختلف فراخوانی کنیم و مقدار برگشتی رو به نتیجه اضاف کنیم چه اتفاقی رخ می دهد؟متاسفانه ما نمیتوانیم مقادیر برگشتی رو به یکدیگر اضاف کنیم.

 

مشکل کد بالا این است که در واقع قبل از resolve شدن کامل promise خروجی در کنسول log شده است.یک راه حل ممکن راه اندازی یک promise زنجیره ای است.برای این کار ما یک تابع جدید به نام addPromise ایجاد میکنیم.این تابع یک مقدار را به عنوان ورودی میگیرد و یک promise را بر میگرداند.

 

حالا ما میتوانیم مقادیر برگشتی رو به نتیجه فراخوانی اضاف کنیم.در این مثال ما باید x + 2*a + 2*b + 2*c رو برگردونیم.

 

آموزش مقدماتی تا پیشرفته جاوا اسکریپت (javascript) – کاملا پروژه محور

 

حالا خط به خط کدهای بالا رو بررسی میکنیم.

  • ابتدا ما تابع addPromise رو ایجاد کردیم.این تابع یک ورودی میگیرد.
  • سپس ما یک Promise ایجاد کردیم.توجه کنید که ما برای سادگی ما خطاها رو مدیریت نمی کنیم.
  • سپس ما doubleAfter2Seconds رو برای اولین بار فراخوانی کردیم و مقدار 10 رو به عنوان ورودی بهش پاس دادیم.بعد از 2 ثانیه مقدار 20 درون متغیر a برگردانده میشود.
  • سپس دوباره doubleAfter2Seconds رو با مقدار 20 فراخوانی کردیم و بعد از 2 ثانیه مقدار 40 درون متغیرb برگردانده میشود.
  • برای آخرین بار doubleAfter2Seconds رو با مقدار 30 فراخوانی میکنیم و بعد از 3 ثانیه مقدار 60 درون متغیر c برگردانده میشود.
  • در نهایت Promise ما با مقدار 10+20+40+60یا130 resolve میشود.

زمانی که ما همه کدها رو کنار هم قرار دهیم قطعه کد زیر رو داریم:

 

تغییر از Promises به Async / Await

حالا کدهای بالا رو بااستفاده از Async/Await بازنویسی میکنم.تابع addPromise رو حذف میکنیم ویک تابع جدید به نام addAsync ایجاد میکنیم.این تایع دقیقا همان هدف addPromise رو دنبال میکنه.وقتی که تایع addAsync رو دارید مینویسید حتما حواستون باشه که از کلمه کلیدی  async قبل از function  استفاده کنید.

 

حالا که یک تابع async ایجاد کردیم میتونیم از کلیدواژه await استفاده کنیم که کد ما را متوقف میکند تا زمانی که promise ما به طور کامل resolve شود.

 

زمانی که ما همه کدها رو کنار هم قرار دهیم قطعه کد زیر رو داریم:

 

همونطور که میبینید با استفاده از Async/Await کدهای ما بسیار ساده تر و قابل فهم تر میشود و به راحتی میشه اونا رو تغییر داد.امیدوارم خوندن این مقاله براتون مفید باشه.اگه هنوز متوجه مفهوم Async/Await نشده اید به احتمال زیاد شما به طور کامل متوجه مفهوم Promiseها نشده اید و بهتره که مقاله  آشنایی با Promise در جاوا اسکریپت رو بخونید تا اطلاعات بیشتری در این زمینه بدست بیارید.

اگر قصد یادگیری جاوا اسکریپت به صورت تخصصی و حرفه ای را دارید، پیشنهاد می کنم آموزش پیشرفته و پروژه محور جاوا اسکریپت (javascript) را مشاهده کنید

  • نیاز به یک منبع فارسی زبان، زیر ساخت های فضای ابری برای اموزش و یادگیری تبدیل به یک ارزوی محال شده بود
    ابرفانت از دل این نیاز به روزگار نو سلام کرد
    یادگیری و اموزش شالوده ابرفانت هست
    ابرفانت فقط ،یک پلتفرم سایت ساز یا زیرساخت رایگانی برای دیگران نیست
    پایگاه دانش جامع ابرفانت ماشین تازه نفس رویای های من بوده
  • دسته‌بندی: آموزش
بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Data Storafe solutions image
Devops
مقایسه نرم افزارهای ذخیره‌سازی EBS, Swift, Longhorn, Rook Ceph

  مقایسه نرم افزارهای ذخیره‌سازی Swift ,RookCeph, Longhorn، و OpenEBS همگی راه‌حل‌های orchestration ذخیره‌سازی کانتینری محبوب برای Kubernetes هستند. همه آنها آسان برای استفاده، قابل مقیاس‌پذیری و قابل اعتماد هستند. با این حال، برخی از تفاوت‌های کلیدی بین آنها وجود دارد.که در این مقاله سعی میکنیم به مهم‌ترین ویژگی‌های آن‌‌ها …

بیمه تامین اجتماعی
آموزش
آموزش رد کردن بیمه و مالیات برای استارت اپ ها

بیمه استارتاپ نداشتن بیمه تکمیلی یکی از مشکلات مهمی است که استارتاپ‌‌ها و فریلنسرها با آن مواجه میشوند.‌ بیمه در استارت اپ برای کارکنان بسیار حائز اهمیت است. فرقی نمیکند که شما کارمند باشید یا کارفرما، بالاخره روزی به بیمه تکمیلی نیاز پیدا خواهید کرد.‌ بیمه تکمیلی جزء بهترین گزینه‌‌‌ها …

What Is Load Balancing? - Blog - GB Cloud
Devops
توزیع کننده ‌بار (Load Balancer) چیست و چه کاریردهایی دارد؟

توزیع کننده ‌بار (Load Balancer) به عنوان پروکسی ترافیک نت کار می­کند. به طوری­که ترافیک شبکه یا برنامه را روی نقاط انتهایی (endpoints) تعدادی از سرورها، توزیع می­نماید. پروکسی متعادل کننده بار برای توزیع ظرفیت در زمان اوج ترافیک و بالا بردن قابلیت اطمینان برنامه ها (reliability) به کار می­رود. …