Ahmadreza Mozaffary
Ahmadreza Mozaffary
خواندن ۲ دقیقه·۳ سال پیش

مفهوم جهنم کالبک Callback Hell در جاواسکریپت

سلام رفیق وقتت بخیر ، امیدوارم سالم و سلامت باشی ?

توی این مقاله میخوایم با هم درباره یک مفهوم نسبتا مهم توی زبان برنامه نویسی Javascript حرف بزنیم ، همونطور که احتمالا توی title این مقاله دیدی ، اون مفهوم همون جهنم کالبک یا Callback Hell هست

پس بدون وقفه میریم سر اصل مطلب ? ...

Callback Hell in Javascript | احمدرضا مظفری
Callback Hell in Javascript | احمدرضا مظفری


? حالا شاید سوال پیش بیاد که چرا این مفهوم برامون اینقدر اهمیت داره ؟

خب ببینید ،‌ دونستن این مفهوم برای ما تقریبا ضروریه به این دلیل که در جاهایی که ما از کالبک ها استفاده میکنیم که کم هم نیستن ،‌ بدونیم که چه کاری رو اگه انجام ندیم ، میتونه مارو از افتادن توی جهنم نجات بده !

مقدمه کافیه و بریم سراغ بررسی ...

اگه که بخوام یک تعریف خلاصه و کلی از این مفهوم یعنی Callback HELL خدمتتون عرض کنم ، باید بگم که هر موقع ما Nested Callback ها ( کالبک های تو در تو ) رو دیدیم ،‌ باید مراقب باشیم که جهنم کالبک در کمینه ! این کالبک ها و خود جهنم کالبک لزوما دالِ بر اینکه باید Promise Base باشن نیست و میتونه قطعا توی توابع معمول هم رخ بده.

مثال زیر رو ببینید :

Nested Calback | Callback HELL | Example
Nested Calback | Callback HELL | Example

ما توی مثال بالا ، درسته که یک تابع داریم که رفتارش async هست ولی خب همونطور که میدونین ربطی به Promise نداره !

این کد الآن ممکنه که توی خواناییش مشکلی نباشه ولی تصور کنید که ۱۰۰ یا ۲۰۰ ثانیه رو میخواستیم لاگ بگیریم ! یا اینکه صرفا محتوای این تابع ، لاگ گرفتن توی کنسول نبود !

⚠️ به طور Overal و خلاصه بخوام خدمتتون عرض کنم ،‌ هرجا که الگویی مثل الگوی مثلثی بالا دیدید ، باید مراقب باشید که جهنم در کمینه ⚠️

خب احمدرضا الان این مثال بالا رو چجوری تمیز بنویسیم که این جهنم کالبک بره به جهنم ? ؟

شما فرض کن که میخوای یک ریکوئست ( درخواست | Request ) به سرور بزنی و میخوای به اون AJAX Call بفهمونی که اگه درخواست مثلا X ثانیه طول کشید ، ریجکت بشه و ارور بده !

مثل کد زیر ?

Promise based setTimeout | No Callback HELL
Promise based setTimeout | No Callback HELL

خب الان که کد رو مثل بالا نوشتیم ( شما خودتون میتونید کد رو به همون مثال ثانیه ها تعمیم بدین ) ، فرضا میخوایم که چندبار این تابع رو پشت سر هم کال کنیم ، کافیه که اونو با متد then توی Promise ها به هم Chain کنیم ( فارسی کِیلی کِیلی کم ? ) و در نهایت فقط کالبک های ساده رو داشته باشیم و یا اینکه اون ها رو با توابع async هندل کنیم که اصلا کالبک نداشته باشیم ?!



خب به آخر این مقاله رسیدیم ،‌خیلی خیلی ممنونم که وقت با ارزشتون رو گذاشتین و این مقاله منو خوندین

موضوع پیشنهادی ، انتقادی از مقاله بود با کمال میل توی کامنت ها یا ایمیل منتظرتون هستم

اگه که راضی بودین یا براتون مفید بود اول ممنون میشم که لایک کنید و برای دوستانتون انتقال بدین ??

javascriptes6
من احمدرضا مظفری به عنوان Software developer توی شرکت همکاران سیستم مشغول هستم ، توی زمینه وب ، میخونم ، یادمیگیرم ، مینویسم .
شاید از این پست‌ها خوشتان بیاید