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 — это новая функция, которая может поддерживаться не всеми браузерами и средами. Поэтому важно проверить совместимость, прежде чем использовать эту функцию в рабочем коде.

Спасибо за прочтение!