آیا مشکل لانه سازی است؟
آیا مشکل لانه سازی است؟
آیا این همان چیزی است که ردیابی جریان ناهمگام را بسیار سخت می کند؟ این بخشی از آن است، مطمئنا.
اما اجازه دهید مثال رویداد تودرتو/تایم اوت/آژاکس قبلی را بدون استفاده از تودرتو بازنویسی کنم:
listen( “click”, handler );
function handler() {
setTimeout( request, 500 );
}
function request(){
ajax( “http://some.url.1”, response );
}
function response(text){
if (text == “hello”) {
handler();
}
else if (text == “world”) {
request();
}
}
این فرمول کد به سختی به اندازه مشکلات تودرتو/تورفتگی شکل قبلی آن قابل تشخیص نیست، و با این حال به همان اندازه مستعد “جهنم پاسخ به تماس” است. چرا؟
همانطور که به دلیل خطی (متوالی) در مورد این کد می رویم، باید از یک تابع، به تابع بعدی، به تابع بعدی پرش کنیم، و در اطراف پایه کد بچرخیم تا جریان دنباله را ببینیم. و به یاد داشته باشید، این کد ساده شده در بهترین حالت است. همه ما میدانیم که پایههای کد برنامه JS async واقعی اغلب به طرز خارقالعادهای به هم ریختهتر هستند، که این نظمهای استدلالی را دشوارتر میکند.
نکته دیگری که باید به آن توجه کرد:
برای اینکه مراحل 2، 3، و 4 را به یکدیگر مرتبط کنیم تا پشت سر هم اتفاق بیفتند، تنها پاسخ مقرون به صرفه ای که به ما می دهد این است که مرحله 2 را به مرحله 1، مرحله 3 به مرحله 2، مرحله 4 را به مرحله 3 تبدیل کنیم. و غیره هاردکدینگ لزوماً چیز بدی نیست، اگر واقعاً یک شرایط ثابت است که مرحله 2 همیشه باید به مرحله 3 منتهی شود.
اما هاردکدینگ قطعا کد را کمی شکنندهتر میکند، زیرا هیچ مشکلی را که ممکن است باعث انحراف در پیشرفت مراحل شود را در نظر نمیگیرد. برای مثال، اگر مرحله 2 ناموفق باشد، مرحله 3 هرگز به مرحله 3 نمی رسد، همچنین مرحله 2 مجددا تلاش نمی کند، یا به یک جریان مدیریت خطای جایگزین می رود و غیره.
همه این مسائل چیزهایی هستند که میتوانید به صورت دستی در هر مرحله کدگذاری کنید، اما این کد اغلب بسیار تکراری است و در مراحل دیگر یا در سایر جریانهای غیر همگام در برنامهتان قابل استفاده مجدد نیست.
حتی اگر مغز ما ممکن است مجموعهای از وظایف را به روشی متوالی برنامهریزی کند (این، سپس این، سپس این)، ماهیت رویدادی عملکرد مغز ما باعث میشود بازیابی/آزمایش مجدد/چنگال کردن کنترل جریان تقریباً بدون دردسر باشد. اگر در حال انجام کارهایتان هستید و متوجه می شوید که لیست خریدی را در خانه گذاشته اید، روز به پایان نمی رسد زیرا از قبل برای آن برنامه ریزی نکرده اید. مغز شما به راحتی این سکسکه را دور می زند: به خانه می روید، لیست را دریافت می کنید، سپس بلافاصله به فروشگاه می روید.
اما ماهیت شکننده فراخوانهای کدهای سخت دستی (حتی با مدیریت خطاهای کد سخت) اغلب به مراتب کمتر دلپذیر است. هنگامی که تمام احتمالات/مسیرهای مختلف را مشخص میکنید (معروف به برنامهریزی از قبل)، کد آنقدر پیچیده میشود که نگهداری یا بهروزرسانی آن دشوار است.
این همان چیزی است که “جهنم پاسخ به تماس” در مورد آن است! تورفتگی/تورفتگی اساساً یک نمایش جانبی، شاه ماهی قرمز است.
قوانین ارسال دیدگاه در سایت