Async چیست؟
دنیای نرمافزارنویسی و طراحی وب دنیای جالبی میباشد. دنیایی که لهجههای نرم افزارنویسی و قابلیت و امکانها و عملکردهایشان معدودنادر گسترش کردند و خوب شدند. در شرایطیکه بشنوید که نرمافزارنویسی ممکن میباشد همگام باشد یا این که ناهمگام (Synchronous Programming or Asynchronous Programming)، چه چیز به ذهنیت شما می آید؟ درحالتی که بشنوید تابعی میتواند ناهمگام باشد، چه؟ چرا اینگونه چیزهایی بایستی در اپنویسی اصلی باشد؟ بالاخره نرم افزارنویس کدها را مینویسند و مرورگر هم آنان را ایفا طراحی سایت در مشهد مینماید.
بگذارید قبلیاز توضیح بیشتر مثالی بزنم. هنگامی میرویم خزانه، بایستی دفعه بگیریم. البته شمارهها (دفعهها) براساس کاری که ما در خزانه می خواهیم جاری ساختن دهیم، فرق مینماید. یعنی وهلهها بهترتیب وجود ندارد. در شرایطیکه اینجانب کارم وازیر وجه باشد، شمارهام می گردد ۵ و شما که کارتان بانکداری الکترونیک میباشد شمارهی ۱. پس شما زودتر از اینجانب می روید و کارتان را ایفا میدهید. اینجانب می بایست در انتظار باشم تا ۴ نفر جلوی اینجانب کارشان به اتمام برسد و بروند تا وهله به اینجانب رسد.
چیزی مشابه همین جریان در اجرای کدها هم حادثه میفتد. برای مثال در کدهای نوشتهگردیده با لهجه جاوااسکریپت ممکن میباشد در صورتیکه ما یحتاج باشد، کدی فارغ ازاینکه نیاز باشد چشم به راه بماند تا همگیی کدهای پیشین انجام شوند، کار نماید و مجموع. ولی خب تمامیی لهجهها این امکان را ندارند. در بعضا گویشها کلیهچیز می بایست بهترتیب و بهدفعه باشد.
مرورگر چطور کدها را می خواند؟ با چه ترتیبی؟ آیا مطلقا می بایست از خط اولیه استارت نماید و بهترتیب بیاید تا انتها؟ یعنی نمیشود ترتیب رعایت نشود و کدی زودتر از سایر انجام گردد؟ اصولا چرا بایستی ترتیب اجرای کدها اصلی باشد؟
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 انجام خواهد شد.
Async چیست؟
دنیای نرمافزارنویسی و طراحی وب دنیای جالبی میباشد. دنیایی که لهجههای نرم افزارنویسی و قابلیت و امکانها و عملکردهایشان معدودنادر گسترش کردند و خوب شدند. در شرایطیکه بشنوید که نرمافزارنویسی ممکن میباشد همگام باشد یا این که ناهمگام (Synchronous Programming or Asynchronous Programming)، چه چیز به ذهنیت شما می آید؟ درحالتی که بشنوید تابعی میتواند ناهمگام باشد، چه؟ چرا اینگونه چیزهایی بایستی در اپنویسی اصلی باشد؟ بالاخره نرم افزارنویس کدها را مینویسند و مرورگر هم آنان را ایفا طراحی سایت در مشهد مینماید.
بگذارید قبلیاز توضیح بیشتر مثالی بزنم. هنگامی میرویم خزانه، بایستی دفعه بگیریم. البته شمارهها (دفعهها) براساس کاری که ما در خزانه می خواهیم جاری ساختن دهیم، فرق مینماید. یعنی وهلهها بهترتیب وجود ندارد. در شرایطیکه اینجانب کارم وازیر وجه باشد، شمارهام می گردد ۵ و شما که کارتان بانکداری الکترونیک میباشد شمارهی ۱. پس شما زودتر از اینجانب می روید و کارتان را ایفا میدهید. اینجانب می بایست در انتظار باشم تا ۴ نفر جلوی اینجانب کارشان به اتمام برسد و بروند تا وهله به اینجانب رسد.
چیزی مشابه همین جریان در اجرای کدها هم حادثه میفتد. برای مثال در کدهای نوشتهگردیده با لهجه جاوااسکریپت ممکن میباشد در صورتیکه ما یحتاج باشد، کدی فارغ ازاینکه نیاز باشد چشم به راه بماند تا همگیی کدهای پیشین انجام شوند، کار نماید و مجموع. ولی خب تمامیی لهجهها این امکان را ندارند. در بعضا گویشها کلیهچیز می بایست بهترتیب و بهدفعه باشد.
مرورگر چطور کدها را می خواند؟ با چه ترتیبی؟ آیا مطلقا می بایست از خط اولیه استارت نماید و بهترتیب بیاید تا انتها؟ یعنی نمیشود ترتیب رعایت نشود و کدی زودتر از سایر انجام گردد؟ اصولا چرا بایستی ترتیب اجرای کدها اصلی باشد؟
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 انجام خواهد شد.

خطاها رایج در طیبندی پستها