Как избежать переполнения стека с помощью класса ошибок es - PullRequest
0 голосов
/ 03 сентября 2018

Я создал пользовательский класс ошибок, который работал нормально, пока я не изменил свою конфигурацию babel и теперь выдает ошибку переполнения стека.

Вот класс ошибок (урезанный для воспроизведения):

export default class UserError extends Error {
    constructor(code, message, innerError, hint) {
        super();
    }
}

Вот мой файл .babelrc (я использую babel 7):

{
    "presets": ["@babel/preset-env", "@babel/preset-react"],
    "plugins": [
        "@babel/plugin-proposal-export-default-from",
        "@babel/plugin-proposal-logical-assignment-operators",
        ["@babel/plugin-proposal-optional-chaining", { "loose": false }],
        ["@babel/plugin-proposal-pipeline-operator", { "proposal": "minimal" }],
        ["@babel/plugin-proposal-nullish-coalescing-operator", { "loose": false }],
        "@babel/plugin-proposal-do-expressions",

        ["@babel/plugin-proposal-decorators", { "legacy": true }],
        "@babel/plugin-proposal-function-sent",
        "@babel/plugin-proposal-export-namespace-from",
        "@babel/plugin-proposal-numeric-separator",
        "@babel/plugin-proposal-throw-expressions",

        "@babel/plugin-syntax-dynamic-import",
        "@babel/plugin-syntax-import-meta",
        ["@babel/plugin-proposal-class-properties", { "loose": false }],
        "@babel/plugin-proposal-json-strings"
    ]
}

Вот ошибка, которую я получаю:

  RangeError: Maximum call stack size exceeded
      at UserError.Wrapper (/Volumes/Development/Development/Xolvio/xspecs/modules/utilities/error.js:18:461)
      at new UserError (/Volumes/Development/Development/Xolvio/xspecs/modules/utilities/error.js:2:48)
      at construct (/Volumes/Development/Development/Xolvio/xspecs/node_modules/harmony-reflect/reflect.js:2086:12)
      at UserError.Wrapper (/Volumes/Development/Development/Xolvio/xspecs/modules/utilities/error.js:18:473)
      at new UserError (/Volumes/Development/Development/Xolvio/xspecs/modules/utilities/error.js:2:48)
      at construct (/Volumes/Development/Development/Xolvio/xspecs/node_modules/harmony-reflect/reflect.js:2086:12)
      at UserError.Wrapper (/Volumes/Development/Development/Xolvio/xspecs/modules/utilities/error.js:18:473)
      at new UserError (/Volumes/Development/Development/Xolvio/xspecs/modules/utilities/error.js:2:48)
      at construct (/Volumes/Development/Development/Xolvio/xspecs/node_modules/harmony-reflect/reflect.js:2086:12)
      at UserError.Wrapper (/Volumes/Development/Development/Xolvio/xspecs/modules/utilities/error.js:18:473)
      at new UserError (/Volumes/Development/Development/Xolvio/xspecs/modules/utilities/error.js:2:48)
      at construct (/Volumes/Development/Development/Xolvio/xspecs/node_modules/harmony-reflect/reflect.js:2086:12)
      at UserError.Wrapper (/Volumes/Development/Development/Xolvio/xspecs/modules/utilities/error.js:18:473)
      at new UserError (/Volumes/Development/Development/Xolvio/xspecs/modules/utilities/error.js:2:48)
      at construct (/Volumes/Development/Development/Xolvio/xspecs/node_modules/harmony-reflect/reflect.js:2086:12)
      at UserError.Wrapper (/Volumes/Development/Development/Xolvio/xspecs/modules/utilities/error.js:18:473)

Есть идеи, что вызывает переполнение и как его исправить?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Это ошибка в библиотеке harmony-reflect, которая обнаруживается в ваших следах стека. Похоже, заменить существующую функцию Reflect.construct на сломанную. Я подал в https://github.com/tvcutsem/harmony-reflect/issues/81.

Вам нужно выяснить, что загружает эту библиотеку, и посмотреть, сможете ли вы удалить ее. К сожалению, похоже, что создается функция Reflect.construct, которая не соответствует спецификации и нарушает выходной код Babel.

0 голосов
/ 03 сентября 2018

фрагмент кода очень ограничен, я могу видеть, что вам нужно передать params в super (), если вы хотите, чтобы он передавал ваш класс Error. Может быть, это вызывает ошибку, пойманную компонентом и, следовательно, бесконечным циклом.

...