"> بررسی خطاها توسط JavaScript

بررسی خطاها توسط JavaScript

JavaScript

برسی خطاها توسط JavaScript ،معمولا خطاها، در کد asynchronous به تعدادی if else های چک شده و یک بازرسی دقیق از مقادیر پارامترها نیاز دارند. Promise ها به کد های ناهمگام اجازه می دهد که ساختار برسی خطاها (ارور) را تایید کند. وقتی از Promise ها استفاده می کنید، می توانید یک کنترل کننده خطا را از Method عبور دهید و یا از روش catch برای پردازش خطاها استفاده کنید. درست مثل استثنا ها در کد های عادی، یک استثنا و یا یک عدم پذیرش در کد asynchronous به نزدیک ترین برسی کننده خطا رجوع می کند.

به عنوان مثال، از عملکرد زیر که آدرس اجرا را در یک رشته متغیر (string variable ) ثبت می کند، استفاده کنید.

var log = "";
 
function doWork() {
    log += "W";
    return Promise.resolve();
}
 
function doError() {
    log += "E";
    throw new Error("oops!");
}
 
function errorHandler(error) {
    log += "H";
}

ما از این عملکردها با کد زیر استفاده می کنیم.

doWork()
    .then(doWork)
    .then(doError)
    .then(doWork) // this will be skipped
    .then(doWork, errorHandler)
    .then(verify);
     
  function verify() {
    expect(log).toBe("WWEH");
    done();
}

انتظار می رود که متغیر ورود (log variable) شامل [WWEH] باشد. زمانی که اجرای کد به پایان رسیده باشد، یعنی جریان تماس ها به doWork، سپس doWork، بعد doError و در نهایت errorHandler می رسند. دو مشاهده برای ساختن نتیجه درباره این وجود دارد، یک مشاهده بدیهی و واضح و مشاهده دقیق و نا محسوس.

نظریه اول زمانی است که تماس (احضار) به doError استثنا به وجود می آورد، اجرای آن به برسی کننده عدم پذیرش بعدی رجوع می کند (errorHandler) و از هر کنترل کننده موفیقت می پرد. زمانی که به promise ها به عنوان ابزار انتقال کد های نا همگام به یک جریان تماس نگاه کنید رفتار آن واضح است. در کد های نا همگام، یک استثنا اظهارات را نادیده می گیرد و stack را جا می گزارد تا یک کنترل کننده catch پیدا کند.
همواره چیزی که ممکن است مشخص نباشد این است که عملکرد بازبینی به عنوان یک کنترل کننده موفقیت بعد از خطا اجرا می شود یا نه. در کد procedural بعد از catch statement درست مانند اجرا های عادی می توان ادامه داد، اجرای عادی بعد از برسی خطا می تواند با promise ها ادامه یابد. عملکرد بازبینی اجرا می شود چرا که کنترل کننده خطا یک وعده (promise ) موفقیت آمیز ارائه می دهد. به یاد داشته باشید که روش then همیشه یک promise جدید باز می گرداند، مگر اینکه کنترل کننده خطا صریحا یک promise جدید را رد کند. Promise جدید با موفیقت بر طرف می شود.

doWork()
    .then(doWork)
    .then(doError)
    .then(doWork) 
    .then(doWork)
    .catch(errorHandler)
    .then(verify);

در رفتار آنها بین دو تکه کد می تواند تفاوت وجود داشته باشد:

then(doWork, errorHandler).

و

then(doWork).
catch(errorHandler).

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

Promise.reject("error!");

 

  • پسورد: www.mspsoft.com
مسعود شریفی پور

از سال 88 که با برنامه نویسی آشنا شدم خیلی علاقه مند بودم یک بستر آموزشی بسازم در فضای وب و به انتشار آموزش های در این زمینه بپردازم.حالا یک تیم داریم و با قدرت رو به جلو حرکت میکنیم.

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

کدیشن ! مارکت پروژه های برنامه نویسی راه اندازی شدیه توکه پا بریم ببینم