আমি উপরে বর্ণিত চেয়ে আরও শক্তিশালী বাক্য গঠন পছন্দ করি। ত্রুটির ধরণের অতিরিক্ত পদ্ধতিগুলি আপনাকে সুন্দর console.log
বা অন্য কিছু তৈরি করতে সহায়তা করবে ।
export class CustomError extends Error {
/**
* @param {string} message
* @param {number} [code = 0]
*/
constructor(message, code = 0) {
super();
/**
* @type {string}
* @readonly
*/
this.message = message;
/**
* @type {number}
* @readonly
*/
this.code = code;
/**
* @type {string}
* @readonly
*/
this.name = this.constructor.name;
/**
* @type {string}
* @readonly
*/
this.stack = CustomError.createStack(this);
}
/**
* @return {string}
*/
toString() {
return this.getPrettyMessage();
}
/**
* @return {string}
*/
getPrettyMessage() {
return `${this.message} Code: ${this.code}.`;
}
/**
* @param {CustomError} error
* @return {string}
* @private
*/
static createStack(error) {
return typeof Error.captureStackTrace === 'function'
? Error.captureStackTrace(error, error.constructor)
: (new Error()).stack;
}
}
এই কোডটি পরীক্ষা করতে আপনি অনুরূপ কিছু চালাতে পারেন:
try {
throw new CustomError('Custom error was thrown!');
} catch (e) {
const message = e.getPrettyMessage();
console.warn(message);
}
CustomError
প্রকারের প্রসারকে স্বাগত জানাই। বর্ধিত প্রকারে কিছু নির্দিষ্ট কার্যকারিতা যুক্ত করা বা বিদ্যমান ওভাররাইড বিদ্যমান। উদাহরণ স্বরূপ.
export class RequestError extends CustomError {
/**
* @param {string} message
* @param {string} requestUrl
* @param {number} [code = 0]
*/
constructor(message, requestUrl, code = 0) {
super(message, code);
/**
* @type {string}
* @readonly
*/
this.requestUrl = requestUrl;
}
/**
* @return {string}
*/
getPrettyMessage() {
const base = super.getPrettyMessage();
return `${base} Request URL: ${this.requestUrl}.`;
}
}