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

پیشنهاد ویژه
[button color="primary" size="big" link="https://nabfollower.com/buy-real-follower/" icon="" target="true" follow="false"]خرید فالوور واقعی[/button][button color="primary" size="big" link="https://nabfollower.com/buy-instagram-like/" icon="" target="true" follow="false"]خرید لایک اینستاگرام[/button][button color="primary" size="big" link="https://nabfollower.com/buy-instagram-views/" icon="" target="true" follow="false"]خرید ویو اینستاگرام[/button][button color="primary" size="big" link="https://nabfollower.com/" icon="" target="true" follow="false"]خرید فالوور اینستاگرام[/button]
کد خوب با خطای خوب برخوردار است. رسیدگی به خطا شامل استفاده از try
/catch
بشر بنابراین ، هر زمان که گمان می کنید خطایی ممکن است پرتاب شود ، باید از آن استفاده کنید catch
آن و هنگامی که خطایی گرفتید ، شما … خوب ، حدس می زنم که آن را بیرون می کشید؟
هدف من این است که شما را متقاعد کنم که با اجازه دادن به خطاها بدون توجه به چه نوع محیطی که در آن کدگذاری می کنید ، خوب باشید.
مرورگرها
مشکلی در مورد رسیدگی به خطا در این کد چیست؟
document.querySelector('.refresh-button')
.addEventListener(async () => {
try {
redrawRecords(await fetchRecords());
} catch (error) {
console.error('Failed to fetch records:', error);
}
});
بیایید با پرسیدن شروع کنیم – آیا می دانید مرورگر در صورت اجازه خطایی که به صورت نامشخص انجام می شود چه می کند؟ آن را بیرون می کشد بنابراین چرا ما زحمت می کشیم که خطا را بدست آوریم و آن را وارد کنیم وقتی که دقیقاً همان کاری است که مرورگر به هر حال انجام می داد؟ شما می توانید پرتاب کنید try
/catch
، این فقط سر و صدای اضافی است.
ممکن است استدلال کنید که console.error()
در حال اضافه کردن زمینه ارزشمند است – این به شما اطلاع می دهد که این خطا در حالی که ما سعی داشتیم سوابق را واکشی کنیم ، رخ داده است. اما این نیز زائد است ، شما با نگاه کردن به ردیابی پشته ، در حال حاضر به همان زمینه دسترسی دارید. اگر در حین تلاش برای واکشی سوابق ، خطایی رخ داد ، نام عملکرد را مشاهده خواهید کرد fetchRecords()
در ردیابی پشته ، که دقیقاً همان زمینه را به شما می دهد.
در این سناریوی خاص ، یک راه حل حتی بهتر این است که هنگام وقوع خطایی به کاربر اطلاع دهید ، اما وقتی این کار انجام شد ، از تجدید نظر در این خطا شرمنده نشوید و اجازه دهید مرورگر بتواند آن را برای شما برای شما انجام دهد.
document.querySelector('.refresh-button')
.addEventListener(async () => {
try {
redrawRecords(await fetchRecords());
} catch (error) {
informUserOfError(error);
throw error;
}
});
سرورهای گره
چه مشکلی در رسیدگی به خطا در این کد سرور گره وجود دارد؟
sendEmailToUser(emailOpts)
.catch(console.error);
برای ارائه برخی زمینه ها ، هنگامی که یک خطا در گره غیرقانونی پیش می رود ، کل فرآیند خراب می شود. اما به یاد داشته باشید ، این یک تصمیم طراحی عمدی بودبشر
ایده این است که به محض اینکه یک خطای ناشناخته اتفاق می افتد ، سرور شما در حالت ناشناخته باقی می ماند و بهترین کاری که می توانید انجام دهید این است که اجازه دهید آن را خراب کنید ، سپس به طور خودکار یک سرور جدید را در حالت تمیز بچرخانید. با این حال ، این فلسفه فقط در صورتی کار می کند که همه این شرایط برای شما اعمال شود:
- کد شما آماده سقوط است. شما هرگز سناریویی ندارید که کورکورانه انجام می دهید
await writeThing1(); await writeThing2()
، زیرا سرور ممکن است بین این دو مرحله ASYNC خراب شود و داده های ذخیره شده شما را در حالت نامعتبر قرار دهد. در دنیای ایده آل ، شما به هر حال می توانید کد قوی را بنویسید که این واقعیت را به خود اختصاص می دهد که یک تصادف در هر نقطه از زمان اتفاق می افتد ، اما واقعیت این است که شما ، مانند بسیاری از افراد ، ممکن است در حال نوشتن کد به آن نوع استاندارد باشید. بشر - هرگونه وابستگی ای که ممکن است استفاده کنید نیز باید با همان روشی آماده شود.
- شما باید تنظیم مجدد خودکار را تنظیم کنید ، بنابراین وقتی سرور شما خراب می شود ، به طور خودکار خود را بازپرداخت می کند. در حالت ایده آل ، شما می توانید یک خوشه از نمونه ها را همزمان اجرا کنید ، بنابراین یکی از آنها تصادف باعث ایجاد خرابی واقعی نمی شود.
- بگویید کسی مجموعه خاصی از ورودی ها را که می تواند به یکی از نقاط پایانی شما ارائه دهد ، پیدا کند تا خطای نامشخصی رخ دهد و سرور شما خراب شود. آیا چیزی وجود دارد که این شخص را از ارسال درخواست ، هر چند ثانیه ، به این نقطه پایانی متوقف کند و باعث شود سرورهای شما به طور مکرر خراب شود و از استفاده شخص دیگری از خدمات شما جلوگیری کند؟ شما باید در برابر این نوع سوءاستفاده ها محافظت کنید.
اگر با فلسفه پیش فرض خطای پیش فرض Node موافقت می کنید و در حال نوشتن نوع کد سازمانی هستید که می تواند از آن پشتیبانی کند ، پس از تلاش برای گرفتن و ورود به هر خطای قابل تصور ، تلاش برای مبارزه با کد خود را متوقف کنید. وقتی اتفاق غیر منتظره ای رخ می دهد ، اجازه دهید روند شما خراب شود.
اگر سرور را اجرا نمی کنید که بتواند از این نوع خرابی غیر منتظره پشتیبانی کند ، رفتار پیش فرض گره در واقع آسیب بیشتری برای شما خواهد داشت. یک راه حل ساده وجود دارد. فقط این را در جایی در پایگاه کد خود پرتاب کنید – این همه خطاهای نامشخص را به خود جلب می کند و آنها را وارد می کند ، و به طور موثری رفتار خطای پیش فرض UNCUAGHT را با یک مرورگر مطابقت می دهد.
process.on('uncaughtException', error => {
console.error(error);
});
اگر عادت دارید که هر خطای گره را برای جلوگیری از خرابی گره در نظر بگیرید و به سیستم وارد شوید ، بنابراین به طور موثری رفتار قطعه کد فوق را به صورت خسته کننده و مستعد خطا انجام می دهید.
کتابخانه
اگر نویسنده کتابخانه هستید ، لزوماً نمی توانید گره را در سطح جهانی تنظیم کنید تا به جای تصادف ، خطاهای غیرمجاز را وارد کنید – این مکان شما برای تصمیم گیری نیست. اما مشکلی نیست هنگامی که کارها در داخلی کتابخانه شما اشتباه پیش می رود ، این وظیفه شماست که اطمینان حاصل کنید که این خطاها خطاهای غیرقابل آموزش تبدیل می شوند ، و این مصرف کننده مسئولیت کتابخانه شما است که تصمیم بگیرید که هنگام وقوع مسائل غیر منتظره چه کاری انجام دهید (خواه این گره را خراب کند ، مسائل را وارد کنید stderr ، یا چیز دیگری کاملاً). سعی نکنید و این انتخاب را از مصرف کنندگان دور کنید. بگذارید خطاهای غیر منتظره شما ناپدید شود.
نتیجه گیری افکار
مثل همیشه ، همه چیز را با یک دانه نمک گفته کنید. در حالی که ، به طور کلی ، خوب است که اجازه دهید خطاها به صورت ناپدید شوند ، سناریوهای خاصی وجود دارد که جلوگیری از خطا در حباب کردن چیز خوبی است. در بعضی موارد ، گرفتن خطاها فقط برای ورود به آنها بهترین گزینه موجود است. من وقتی که این سناریوها ممکن است مناسب نباشند یا ممکن است مناسب نباشند ، در عوض ، من فقط از شما می خواهم که از قضاوت خود استفاده کنید ، و از اینکه خطاهای غیرقانونی را به عنوان گزینه معتبر در نظر بگیرید ، نمی ترسم.