Понимание Error.captureStackTrace и устойчивости трассировки стека? - PullRequest
0 голосов
/ 07 января 2020

В то время как go я использовал Verror от joyent, чтобы не потерять трассировку стека при повторном отбрасывании, я только что провел тест с узлом v12 без Verror, и трассировка стека, кажется, сохраняется без использования ошибки.

Затем я посмотрел на использование Error.captureStackTrace, в нем говорится, что использовать это в ваших ошибках, чтобы ошибка не была добавлена ​​в стек.

Я не то, что я делаю неправильно, но с или без Error.captureStackTrace - трассировка стека одинакова ..

Я хотел бы знать текущее состояние использования captureStackTrace, поскольку я не вижу разницы :-), а также использование Ошибка, которая больше не нужна.

В документации говорится, что .stack недоступен без вызова captureStackTrace, но я вижу его доступным каждый раз, с или без captureStackTrace

вот пример 2 x ошибок

class MyErrorOne extends Error {
  constructor(message) {
    super(message);

    Error.captureStackTrace(this, this.constructor);
  }
}

class MyErrorTwo extends Error {
  constructor(message) {
    super(message);

    Error.captureStackTrace(this, this.constructor);
  }
}

Я попробовал их, закомментировав captureStackTrace в EACH error и stackt раса такая же.

Кто-нибудь может помочь?

Вот мой код для проверки вызова ошибок

const DoOne = () => {
  try {
    console.log("executing do one");
    DoTwo();
  } catch (error) {
    console.log("error in DoOne", error);
    console.log("here is the stack ", error.stack);
    throw new MyErrorOne("threw error from doone in myerrorone");
    // throw error;
  }
};

const DoTwo = () => {
  try {
    console.log("executing do two");
    throw new MyErrorTwo("threw error from dotwo in myerrortwo");
  } catch (error) {
    console.log("error in DoTwo", error);
    throw error;
  }
};

DoOne();
...