Как переопределить встроенное исключение? - PullRequest
1 голос
/ 05 апреля 2019

Я использую функцию array.pop () для целочисленной переменной и ожидаю ошибку.В настоящее время я получаю сообщение «TypeError: x.pop is not function».Я хотел бы переопределить это своим собственным сообщением, используя «throw»

Я попытался использовать другой try-catch внутри первого блока catch, и это завершило работу.Но я бы хотел переопределить первое TypeError исключение в самом первом блоке try.

let x = 3
try {
    x.pop();
// I want to override the exception generated due to this line 
// with my own error message using throw
}
catch (e) {
    try {
        throw thisErr("this is my custom error message..")
    }
    catch (er) {
        console.log(er);
    }
}

function thisErr(message) {
    let moreInfo = message
    let name = "My Exception"
    return `${name}: "${moreInfo}"`
}

Я ожидаю My Exception: "this is my custom error message.."

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Быстрый метод: Вы можете использовать конструктор Error для создания объекта Error и использовать его в качестве основы для определения пользовательских исключений.Этот метод обычно можно использовать, когда не существует нескольких экземпляров, в которых вам нужно выдавать пользовательские исключения.

let x = 3;
try {
    x.pop();
} catch (e) {
    throw new Error({ 
        name: "My Exception",
        message: "this is my custom error message..", 
        toString: function() { return `${this.name} : ${this.message}` } 
    });
}

Лучший метод: Создать класс CustomError и определить свой собственный конструктор для этого пользовательскогоучебный класс.Этот метод является лучшим и более надежным и может использоваться, когда вашему приложению требуются пользовательские исключения во многих местах.

class CustomError extends Error {
    constructor(name, message, ...params) {
    // Pass remaining arguments (including vendor specific ones) to parent 
    constructor
        super(...params);

        this.name = name;
        this.message = message;

        // Maintains proper stack trace for where our error was thrown (only available on V8)
        if (Error.captureStackTrace) {
            Error.captureStackTrace(this, CustomError);
        }
    }
}

let x = 3;
try {
    x.pop();
} catch(e){
    throw new CustomError('My Exception', 'this is my custom error message..', e);
}
0 голосов
/ 05 апреля 2019

Использование console.error(er).

let x = 3
try {
    x.pop();
}
catch (e) {

        var er = thisErr("this is my custom error message..");
        // log(black)  My Exception: "this is my custom error message.."
        console.log(er);
        // error(red)  My Exception: "this is my custom error message.."
        console.error(er);
        // error(red) Uncaught My Exception: "this is my custom error message.."
        throw er;

}
function thisErr(message) {
    let moreInfo = message
    let name = "My Exception"
    return `${name}: "${moreInfo}"`
}
...