Error.prototype.cause — это относительно новая функция, добавленная в ECMAScript 2022, которая позволяет связать вместе два или более объектов ошибок, чтобы сформировать причинно-следственную цепочку. Причинно-следственная цепочка полезна, когда одна ошибка вызвана другой, а трассировка стека для первой ошибки необходима для диагностики второй ошибки.
Давайте посмотрим, как работает Error.prototype.cause, на нескольких примерах:
const firstError = new Error('First error'); const secondError = new Error('Second error'); secondError.cause = firstError; throw secondError;
В приведенном выше примере мы устанавливаем причину второй ошибки как первую ошибку, используя свойство причины. Затем выбрасываем вторую ошибку, которая покажет причинно-следственную цепочку при ее обнаружении.
function divide(a, b) { if (b === 0) { throw new Error('Divide by zero'); } return a / b; } function calculate() { try { const result = divide(10, 0); console.log('Result: ', result); } catch (error) { throw new Error('Calculation error', { cause: error }); } } try { calculate(); } catch (error) { console.log(error.stack); }
В этом примере функция «вычислить» вызывает функцию «разделить» и перехватывает ошибку. Затем он создает новую ошибку с более общим сообщением и устанавливает причину ошибки, вызванной функцией «разделить». Наконец, он повторно выдает новую ошибку, которая покажет причинно-следственную цепочку, когда она будет перехвачена в основном блоке try-catch.
Error.prototype.cause полезен, когда нам нужно отлаживать сложные сценарии ошибок, в которых одна ошибка вызвана другой. Это позволяет нам сохранить трассировку стека исходной ошибки, что может помочь нам определить основную причину ошибки.
Стоит отметить, что Error.prototype.cause — это новая функция, которая может поддерживаться не всеми браузерами и средами. Поэтому важно проверить совместимость, прежде чем использовать эту функцию в рабочем коде.
Спасибо за прочтение!