Async چیست
خدمات طراحی سایت و برنامه نویسی انواع پلتفرم ، اپلیکیشن در شمال کشور با سابقه درخشان از سال 1385 بصورت حرفه ای
Async چیست؟
برای اینکه دربارهی تابع Async در جاوااسکریپت یا Asynchrony در برنامهنویسی توضیح دهم، اول باید خیلی خوب دربارهی برنامهنویسی همگام و ناهمگام حرف بزنم. برنامهنویس برای نوشتن کدهای یک صفحه از یک وبسایت شاید لازم باشد تا چندین هزار خط کد بنویسد. این کدها هرکدام عملکردها و و ظایف مشخص اما متفاوتی دارند. بعضیها مربوط میشوند به درخواستهایی از سرور و بعضیها را مرورگر اجرا میکند.
برای کاربر و برنامهنویس مهم است که همهی کدها خیلی سریع انجام شوند و صفحه کاملا بارگذاری شود. شاید کاربر از سایت درخواستی داشته باشد یا بخواهد کاری در سایت انجام دهد. پس شاید اجرای بعضی کدها مستلزم دریافت نتیجهای از سرور و چندین رفتوبرگشت میان سرور و صفحه باشد. پس، بههمیندلیل، ترتیب اجرای کدها مهم است. خیلی از کدها باید همزمان باهم (همگام) اجرا شوند تا مشکلی پیش نیاید و کاربر معطل چیزی نشود.
Synchronous Programming (برنامه نویسی همگام)
برنامهنویسی همگام یا عملکردهای همگام (Synchronous Operations) یا Blocking Programming زمانی اتفاق میافتد که اجرای کامل کدهایی (عملکردهایی) جلوی اجرای سایر کدها را میگیرد. یعنی دستور اجرای هیچ کد دیگری عملی نمیشود تا یک کار (Task) تمام شود. اگر به مثال بانک برگردیم، شما باید صبر کنید تا کارهای ۴ نفر جلویی شما تمام شود و بعد نوبت به شما برسد. آن ۴ نفر جلویی راه شما را بستهاند (بلاک کردهاند). البته برنامهنویسی همگام کاربردهای خودش را دارد. مهمترین کاربردش در ساختن Real-time Systems است. زبانهای Argus, Signal and Lustre از زبانهای خاص برنامهنویسی همگام هستند. سایر زبانها مثل جاوا و پایتون و #C نیز همگام هستند اما راههایی وجود دارد که بشود کدهای ناهمگام با آنها نوشت.
Asynchronous Programming (برنامه نویسی ناهمگام)
برنامهنویسی ناهمگام یا عملکردهای ناهمگام (Asynchronous Operations) یا Nonblocking Programming نقطهی مقابل اولی است. یعنی چند عملکرد و کد باهم میتوانند اجرا شوند و خللی در کار جریان اصلی اجرای کدهای نوشته هم ایجاد نکنند. دراینجا دیگر نوبت یا ترتیب معنا ندارد. مجموعه کدها بهموازات هم اجرا میشوند. مهمترین کاربرد این نوع از برنامهنویسی زمانی است که درخواستی از پایگاهداده (Database) میشود و نتیجهای باید از آن گرفت. بارگذاری بقیهی صفحه و اجرای سایر کدها متوقف نمیماند تا آن نتیجه برسد و آن کار تمام شود. تنها زبان برنامهنویسی که ناهمگام است و درهنگام اجرا در مرورگر ناهمگام عمل میکند، زبان جاوااسکریپت است.
جاوااسکریپت و برنامه نویسی Asynchronous
جاوااسکریپت (JavaScript or JS) زبان قدرتمند و توانمندی است که کتابخانههای زیادی دارد. فریمورکهای قدرتمندی هم دارد. یکی از معروفترین فریمورکهای سمت سرور این زبان که آنهم به شما امکان برنامهنویسی ناهمگام میدهد، فریم ورک Node است. ناهمگامی در جاوااسکریپت به این دلیل است که برنامهنویس میتواند ترتیب اجرای توابع (Functions) را کنترل کند. یعنی توابع براساسی که نوشته میشوند ممکن است خوانده نشوند. جاوااسکریپت دو امکان مهم برای کنترلکردن زمان اجرای توابع به برنامهنویس میدهد.
اولین امکان Callbacks در جاوااسکریپت است. برنامهنویس با این امکان میتواند وقتی تابعی اجرا شد از آن تابع بخواهد تا اجرای تابع دیگری را فراخواند (یعنی اجرای دومی شروع شود). امکان دوم به Async در JS یا Async/Await معروف است که با کمک JS Promises عملی میشود.
Async/Await در جاوا اسکریپت
در جاوااسکریپت شیئ (Object) بهنام Promise وجود دارد که میشود در درونش دو دسته کد را جای داد. کدهایی که باید اجرا شوند و نتیجهای را حاصل کنند (Producing code) و کدهایی که به آن نتیجه نیاز دارند و منتظر گرفتن آن نتیجه، که یا موفقیتآمیز است یا یک خطا، میمانند (Consuming code).
وقتی کلمهی Async قبلاز تابعی نوشته میشود، آن تابع باید یک Promise را اجرا کند و نتیجهاش که مشخص شد، براساس آن نتیجه کاری انجام دهد. اما وقتی کلمهی Await قبلاز تابعی نوشته میشود، آن تابع باید منتظر باشد تا نتیجهی یک شئ مشخص شود و بعد اجرا شود. مثلا، برنامهنویس میتواند به دو تابع زمان بدهد. یعنی کد را اینطور بنویسد که تابع دوم ۵ ثانیه پس از مشخصشدن نتیجهی Promise اجرا شود.