آدرس : تهران میدان فردوسی خیابان ایرانشهر بین سمیه و طالقانی مجتمع تجاری میلاد واحد 9

پشتیبانی 24 ساعته : 02188867940 – 09927674217

برای مشاهده لیست علاقه مندی ها وارد شوید!

مشاهده محصولات فروشگاه
0

هیچ محصولی در سبد خرید نیست.

تماس های تو در تو

دسته بندی :اخبار سایت 19 مارس 2023 علیرضا بابامرادی 179
تماس های تو در تو

تماس های تو در تو

setTimeout( function request(..){
// ..
}, 500) ;

سپس هنوز بعد، ما:

ajax( “..”, function response(..){
// ..
} );

و در نهایت (بیشتر بعد)، ما

if ( .. ) {
// ..
}

else ..

اما چندین مشکل با استدلال در مورد این کد به صورت خطی به این شکل وجود دارد.

اولاً این تصادفی از مثال است که مراحل ما در خطوط بعدی (1، 2، 3، و 4…) است. در برنامه‌های async JS واقعی، اغلب نویزهای بیشتری وجود دارد که همه چیز را به هم می‌ریزد، نویزهایی که باید به طرز ماهرانه‌ای در مغزمان مانور دهیم و از یک عملکرد به عملکرد دیگر پرش کنیم. درک جریان ناهمگام در چنین کدهای دارای تماس غیرممکن نیست، اما مطمئناً حتی با تمرین زیاد، طبیعی یا آسان نیست.

اما همچنین، اشتباه عمیق تری وجود دارد، که فقط در آن مثال کد مشخص نیست. اجازه دهید سناریوی دیگری (شبه کد) برای نشان دادن آن بسازم:

doA( function(){
doB();

doC( function(){
doD();
} )
doE();
} );
doF();

در حالی که افراد باتجربه در میان شما ترتیب واقعی عملیات را در اینجا به درستی تشخیص می دهند، شرط می بندم که در نگاه اول کمی گیج کننده است و رسیدن به آن به چرخه های ذهنی هماهنگ نیاز دارد. عملیات به ترتیب زیر انجام می شود:

  • doA()
  • doF()
  • doB()
  • doC()
  • doE()
  • doD()

اولین باری که به کد نگاه کردید درست متوجه شدید؟

خوب، برخی از شما فکر می کنید که من در نامگذاری عملکردم بی انصافی کردم تا عمداً شما را به بیراهه بکشانم. قسم می خورم که فقط به ترتیب ظاهر از بالا به پایین نام می بردم. اما اجازه دهید دوباره تلاش کنم:

doA( function(){
doC();

doD( function(){
doF();
} )
doE();
} );
doB();

اکنون، من آنها را بر اساس حروف الفبا به ترتیب اجرای واقعی نامگذاری کرده ام. اما من هنوز شرط می بندم، حتی با تجربه ای که اکنون در این سناریو دارم، ردیابی از طریق ترتیب A -> B -> C -> D -> E -> F برای بسیاری از شما خوانندگان طبیعی نیست. مطمئناً چشمان شما به شدت از قطعه کد بالا و پایین می پرند، درست است؟

اما حتی اگر همه چیز برای شما طبیعی باشد، باز هم یک خطر دیگر وجود دارد که می تواند ویران کند. آیا می توانید متوجه شوید که چیست؟

اگر doA(..) یا doD(..) واقعاً همانطور که ما آشکارا فرض می‌کردیم غیرهمگام نباشند، چه؟ اوه اوه، اکنون ترتیب متفاوت است. اگر هر دو همگام هستند (و شاید فقط گاهی اوقات، بسته به شرایط برنامه در آن زمان)، ترتیب اکنون A -> C -> D -> F -> E -> B است.

صدایی که به‌تدریج در پس‌زمینه شنیدید، آه‌های هزاران توسعه‌دهنده JS است که به تازگی لحظه‌ای با چهره‌ای در دست داشتند.

آیا مشکل لانه سازی است؟

آیا این همان چیزی است که ردیابی جریان ناهمگام را بسیار سخت می کند؟ این بخشی از آن است، مطمئنا.

اما اجازه دهید مثال رویداد تودرتو/تایم اوت/آژاکس قبلی را بدون استفاده از تودرتو بازنویسی کنم:

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();
}
}

این فرمول کد به سختی به اندازه مشکلات تودرتو/تورفتگی شکل قبلی آن قابل تشخیص نیست، و با این حال به همان اندازه مستعد “جهنم پاسخ به تماس” است. چرا؟

علیرضا بابامرادی

راه آسان‌تری برای ارتباط با کاربران‌مان پیدا کرده‌ایم :) عضویت در کانال

مطالب زیر را حتما بخوانید:

قوانین ارسال دیدگاه در سایت

  • چنانچه دیدگاهی توهین آمیز باشد تایید نخواهد شد.
  • چنانچه دیدگاه شما جنبه ی تبلیغاتی داشته باشد تایید نخواهد شد.
  • چنانچه از لینک سایر وبسایت ها و یا وبسایت خود در دیدگاه استفاده کرده باشید تایید نخواهد شد.
  • چنانچه در دیدگاه خود از شماره تماس، ایمیل و آیدی تلگرام استفاده کرده باشید تایید نخواهد شد.
  • چنانچه دیدگاهی بی ارتباط با موضوع آموزش مطرح شود تایید نخواهد شد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

لینک کوتاه:
0