Почему возникает бесконечная ошибка рекурсии при обработке JSON .stringify - PullRequest
0 голосов
/ 21 марта 2020
function repErr(key, value) {
  let error = {};
  Object.getOwnPropertyNames(value).forEach(function (key) {
      error[key] = value[key];
  });
  return error;
}

Когда я вызываю JSON .stringify (err, repErr), я вижу ошибку слишком много рекурсии в консоли.
У меня есть firefox 68, и я вызывал отладчик на каждой итерации, и я видел это на На четвертом проходе он начинает добавлять что-то подобное к объекту:

{
  0: 'h',
  1: 't',
  2: 't',
  3: 'p',
  // and etc
}

В чем причина и можно ли это исправить?

1 Ответ

2 голосов
/ 21 марта 2020

Объект, скорее всего, содержит циклы, где объект в дереве ссылается на другой объект, который в конечном итоге ссылается на этот первый объект. Я обнаружил, что эта проблема часто возникает с ошибками типа axios, потому что объект ответа ссылается на объект запроса, а объект запроса имеет ссылку на объект ответа.

Это раздражающая проблема, которая часто кусается нас. К счастью, есть библиотеки типа json-decycle и другие, которые решают эту проблему путем изменения циклических ссылок на что-то, что может быть сериализовано без переполнения стека.

...