سلام رفیق وقتت بخیر ، امیدوارم سالم و سلامت باشی ?
توی این مقاله میخوایم با هم درباره یک مفهوم نسبتا مهم توی زبان برنامه نویسی Javascript حرف بزنیم ، همونطور که احتمالا توی title این مقاله دیدی ، اون مفهوم همون جهنم کالبک یا Callback Hell هست
پس بدون وقفه میریم سر اصل مطلب ? ...
? حالا شاید سوال پیش بیاد که چرا این مفهوم برامون اینقدر اهمیت داره ؟
خب ببینید ، دونستن این مفهوم برای ما تقریبا ضروریه به این دلیل که در جاهایی که ما از کالبک ها استفاده میکنیم که کم هم نیستن ، بدونیم که چه کاری رو اگه انجام ندیم ، میتونه مارو از افتادن توی جهنم نجات بده !
مقدمه کافیه و بریم سراغ بررسی ...
اگه که بخوام یک تعریف خلاصه و کلی از این مفهوم یعنی Callback HELL خدمتتون عرض کنم ، باید بگم که هر موقع ما Nested Callback ها ( کالبک های تو در تو ) رو دیدیم ، باید مراقب باشیم که جهنم کالبک در کمینه ! این کالبک ها و خود جهنم کالبک لزوما دالِ بر اینکه باید Promise Base باشن نیست و میتونه قطعا توی توابع معمول هم رخ بده.
مثال زیر رو ببینید :
ما توی مثال بالا ، درسته که یک تابع داریم که رفتارش async هست ولی خب همونطور که میدونین ربطی به Promise نداره !
این کد الآن ممکنه که توی خواناییش مشکلی نباشه ولی تصور کنید که ۱۰۰ یا ۲۰۰ ثانیه رو میخواستیم لاگ بگیریم ! یا اینکه صرفا محتوای این تابع ، لاگ گرفتن توی کنسول نبود !
خب احمدرضا الان این مثال بالا رو چجوری تمیز بنویسیم که این جهنم کالبک بره به جهنم ? ؟
شما فرض کن که میخوای یک ریکوئست ( درخواست | Request ) به سرور بزنی و میخوای به اون AJAX Call بفهمونی که اگه درخواست مثلا X ثانیه طول کشید ، ریجکت بشه و ارور بده !
مثل کد زیر ?
خب الان که کد رو مثل بالا نوشتیم ( شما خودتون میتونید کد رو به همون مثال ثانیه ها تعمیم بدین ) ، فرضا میخوایم که چندبار این تابع رو پشت سر هم کال کنیم ، کافیه که اونو با متد then توی Promise ها به هم Chain کنیم ( فارسی کِیلی کِیلی کم ? ) و در نهایت فقط کالبک های ساده رو داشته باشیم و یا اینکه اون ها رو با توابع async هندل کنیم که اصلا کالبک نداشته باشیم ?!
خب به آخر این مقاله رسیدیم ،خیلی خیلی ممنونم که وقت با ارزشتون رو گذاشتین و این مقاله منو خوندین
موضوع پیشنهادی ، انتقادی از مقاله بود با کمال میل توی کامنت ها یا ایمیل منتظرتون هستم
اگه که راضی بودین یا براتون مفید بود اول ممنون میشم که لایک کنید و برای دوستانتون انتقال بدین ??