2017-02-20 3 views
0

Я пытаюсь добавить идентификатор в setInterval функции в файл JSON, но он получает мне ошибку TypeError: Converting circular structure to JSONприлагая к JSON вызывает ошибку

Мой код выглядит следующим образом

var clearID = setInterval(function(){ 
    //do stuff 
},(60)*1000); 

fs.readFile('path', 'utf8', function readFileCallback(err, data){ 
    if (err) return console.log(err); 
    var doc = JSON.parse(data); 
    doc.IDs.shift(); 
    doc.IDs.push(clearID); 
    var saved = JSON.stringify(doc); 
    fs.writeFile('path', saved, 'utf8', (err)=>{ 
    if(err) return console.log(err); 
    }); 
}); 

Что должен Я могу изменить эту ошибку?

+2

Я думаю, что проблема с ** meusfeeds **, что его содержание? –

+0

Можете привести пример своих данных? –

+0

Почему вы хотите поместить идентификатор интервала в файл? В любом случае, если идея состоит только в том, чтобы обновить существующий файл, она должна быть 'var saved = JSON.stringify (doc);', так как 'doc' относится к только что измененному объекту. – nnnnnn

ответ

0

В среде NodeJS вы просто не можете преобразовать возвращаемое значение вызова setInterval в строку JSON. Полученная ошибка очень ясна, возвращаемое значение содержит одну или несколько круговых ссылок.

Попробуйте это (в среде узла):

var x = setInterval(function() { },100); 
console.log(x); 

Смотрите циклические ссылки? Они отображаются как [Circular]

В среде браузера вы получите номер, возвращаемый с setTimeout или setInterval, но не тот случай, когда эти функции выполняются в узле.

NodeJS timers documentation

Browser timers documentation (e.g. setTimeout)

+0

Я вижу ... есть ли другой способ сохранить это значение, чтобы использовать его вне моей функции? –

+0

@LostWoods - не в строке, вы можете сохранить ее в памяти в какой-то структуре данных, которую вы определяете, но это о ней. – Adam

+0

ОК, спасибо за ответ –

Смежные вопросы