تلاش برای ذخیره تماس ها
تلاش برای ذخیره تماس ها
انواع مختلفی از طراحی پاسخ به تماس وجود دارد که سعی کرده اند به برخی از مسائل اعتماد (نه همه!) که ما به آنها نگاه کردیم رسیدگی کنند. این یک تلاش شجاعانه، اما محکوم به فنا برای نجات الگوی برگشت تماس از فروپاشی خود است.
به عنوان مثال، با توجه به مدیریت دقیقتر خطا، برخی از طراحیهای API برای اعلانهای خطا (یکی برای اعلان موفقیت، یکی برای اعلان خطا) ارائه میکنند.
function success(data) {
console.log( data );
}
function failure(err) {
console.error( err );
}
ajax( “http://some.url.1”, success, failure );
در APIهای این طراحی، غالباً کنترل کننده خطا () اختیاری است و اگر ارائه نشود، فرض می شود که می خواهید خطاها را بلعیده کنید. اوه
توجه: این طرح پاسخ به تماس تقسیم شده همان چیزی است که ES6 Promise API از آن استفاده می کند. در فصل بعدی به ES6 Promises با جزئیات بیشتری خواهیم پرداخت.
یکی دیگر از الگوهای متداول فراخوانی “سبک اول خطا” نامیده می شود
(گاهی اوقات “سبک گره” نامیده می شود، زیرا همچنین قراردادی است که در تقریباً تمام API های Node.js استفاده می شود)، که در آن اولین آرگومان یک پاسخ به تماس منفرد برای یک شی خطا رزرو می شود. در صورت وجود). در صورت موفقیت، این آرگومان خالی/نادرست خواهد بود (و هر آرگومان بعدی داده موفقیت خواهد بود)، اما اگر یک نتیجه خطایی اعلام شود، اولین آرگومان تنظیم/درست است (و معمولا هیچ چیز دیگری ارسال نمی شود):
function response(err,data) {
// error?
if (err) {
console.error( err );
}
// otherwise, assume success
else {
console.log( data );
}
}
ajax( “http://some.url.1”, response );
در هر دوی این موارد چند نکته باید رعایت شود.
اولاً، آنطور که ممکن است به نظر برسد، اکثریت مسائل اعتماد را واقعاً حل نکرده است. هیچ چیزی در مورد تماس برگشتی وجود ندارد که از فراخوان های مکرر ناخواسته جلوگیری یا فیلتر کند. علاوه بر این، اکنون اوضاع بدتر شده است، زیرا ممکن است سیگنالهای موفقیت و خطا یا هیچکدام را دریافت کنید، و همچنان باید در مورد هر یک از این شرایط کدنویسی کنید.
همچنین، از این واقعیت غافل نشوید که اگرچه این یک الگوی استاندارد است که میتوانید از آن استفاده کنید، اما بدون استفاده مجدد زیاد، قطعاً پرمخاطبتر و بینقصتر است، بنابراین از تایپ همه آنها برای هر پاسخ به تماس در برنامه خود خسته خواهید شد. .
در مورد مسئله اعتماد که هرگز تماس نگرفته اید چطور؟ اگر این یک نگرانی است (و احتمالاً باید باشد!)، احتمالاً باید یک بازه زمانی تنظیم کنید که رویداد را لغو کند. شما می توانید یک ابزار (فقط اثبات مفهوم نشان داده شده است) برای کمک به شما در این زمینه ایجاد کنید:
function timeoutify(fn,delay) {
var intv = setTimeout( function(){
intv = null;
fn( new Error( “Timeout!” ) );
}, delay )
;
return function() {
// timeout hasn’t happened yet?
if (intv) {
clearTimeout( intv );
fn.apply( this, arguments );
}
};
}
در اینجا نحوه استفاده از آن آمده است:
// using “error-first style” callback design
function foo(err,data) {
if (err) {
console.error( err );
}
else {
console.log( data );
}
}
ajax( “http://some.url.1”, timeoutify( foo, 500 ) );
قوانین ارسال دیدگاه در سایت