Callback
Callback
Callback ها واحد اساسی ناهمزمانی در JS هستند. اما آنها برای چشم انداز در حال تکامل برنامه نویسی async با بلوغ JS کافی نیستند.
اول، مغز ما چیزها را به روشهای معنایی متوالی، مسدودکننده و تک رشتهای برنامهریزی میکند، اما تماسهای برگشتی جریان ناهمزمان را به روشی نسبتاً غیرخطی و غیر متوالی بیان میکنند، که استدلال درست در مورد چنین کدی را بسیار سختتر میکند. دلیل بد در مورد کد، کد بدی است که منجر به باگ های بد می شود.
ما به راهی برای بیان ناهمزمانی به شیوه ای همزمان تر، متوالی تر و مسدودکننده تر، درست مانند مغزمان نیاز داریم.
دوم، و مهمتر از آن، تماسهای برگشتی از وارونگی کنترل رنج میبرند، زیرا به طور ضمنی کنترل را به شخص دیگری (اغلب یک ابزار شخص ثالث که تحت کنترل شما نیست!) میدهند تا ادامه برنامه شما را فراخوانی کند. این انتقال کنترل ما را به یک لیست مشکلساز از مسائل مربوط به اعتماد هدایت میکند، مانند اینکه آیا تماس برگشتی بیشتر از آنچه انتظار داریم فراخوانی میشود یا خیر.
ابداع منطق موقت برای حل این مشکلات اعتماد ممکن است، اما دشوارتر از آن چیزی است که باید باشد، و نگهداشتن کد پیچیدهتر و سختتر را تولید میکند، و همچنین کدهایی را تولید میکند که احتمالاً به اندازه کافی در برابر این خطرات محافظت نمیشوند تا زمانی که بهطور واضح توسط باگها گاز گرفته شوند. .
ما به یک راهحل کلی برای همه مسائل مربوط به اعتماد نیاز داریم،
راهحلی که میتوان آن را برای هر تعداد تماسهای برگشتی بدون سربار اضافی دیگ بخار استفاده کرد.
ما به چیزی بهتر از تماس تلفنی نیاز داریم. آنها تا اینجا به خوبی به ما خدمت کردهاند، اما آینده جاوا اسکریپت به الگوهای همگامسازی پیچیدهتر و توانمندتری نیاز دارد. فصول بعدی این کتاب به آن تحولات نوظهور می پردازد.
ما دو دسته عمده از کاستیها را در استفاده از callbacks برای بیان ناهمزمانی برنامه و مدیریت همزمانی شناسایی کردیم: عدم توالی و عدم قابلیت اعتماد. اکنون که مشکلات را بیشتر درک می کنیم، وقت آن است که توجه خود را به الگوهایی معطوف کنیم که می توانند آنها را برطرف کنند.
موضوعی که میخواهیم ابتدا به آن بپردازیم، وارونگی کنترل است، اعتمادی که بسیار شکننده است و به راحتی از دست میرود.
به یاد داشته باشید که ما ادامه برنامه خود را در یک تابع callback می بندیم، و آن تماس را به طرف دیگری (به طور بالقوه حتی کد خارجی) تحویل می دهیم و فقط انگشتان خود را روی هم می گذاریم که با فراخوانی پاسخ به تماس، کار درست را انجام دهد.
ما این کار را انجام میدهیم زیرا میخواهیم بگوییم، “این است که بعداً، پس از اتمام مرحله فعلی، چه اتفاقی میافتد.”
اما اگر بتوانیم این وارونگی کنترل را وارونه کنیم چه؟ اگر بجای اینکه ادامه برنامه خود را به طرف دیگری واگذار کنیم، انتظار داشته باشیم که این قابلیت را به ما برگرداند تا بدانیم کارش چه زمانی تمام میشود، و سپس کد ما تصمیم بگیرد که در مرحله بعد چه کار کنیم؟
به این پارادایم قول می گویند.
وعدهها شروع به طوفان کردن دنیای JS کردهاند، زیرا توسعهدهندگان و نویسندگان مشخصات به طور ناامیدانه به دنبال رفع جنون جهنم پاسخ به تماس در کد/طراحی خود هستند. در واقع، اکثر APIهای همگام جدیدی که به پلتفرم JS/DOM اضافه می شوند، بر روی Promises ساخته می شوند. بنابراین احتمالاً ایده خوبی است که آنها را بیاموزید و یاد بگیرید، فکر نمی کنید!؟
توجه: کلمه “فورا” اغلب در این فصل استفاده می شود، به طور کلی برای اشاره به برخی اقدامات حل و فصل Promise. با این حال، اساساً در همه موارد، “فورا” به معنای رفتار صف شغلی است (به فصل 1 مراجعه کنید)، نه به معنای فعلی کاملاً همزمان.
قوانین ارسال دیدگاه در سایت