У меня возникла очень странная проблема. Я импортирую некоторые большие xml-файлы и сохраняю их в mongoDB. Алгоритм представляет собой типичный цикл асинхронный:Ошибка: подключить EADDRNOTAVAIL при обработке большой петли асинхронизации
doLoop = function(it, callback_loop) {
if(it < no_of_items) {
storeToMongo(..., function(err, result) {
...
doLoop(it+1, callback_loop);
});
} else {
callback_loop();
}
};
doLoop(0, function() {
...
});
Теперь (вдруг без каких-либо значительных изменений в коде) я получаю следующее сообщение об ошибке при выполнении цикла:
events.js:72
throw er; // Unhandled 'error' event
^
Error: connect EADDRNOTAVAIL
at errnoException (net.js:901:11)
at connect (net.js:764:19)
at net.js:842:9
at dns.js:72:18
at process._tickCallback (node.js:415:13)
ошибка происходит примерно через минуту , Количество обработанных элементов в то же время всегда одно и то же, но не совсем.
Я попытался выяснить, что вызывает connect/net
, но я потерян. В моем коде отсутствует сокет-соединение. У меня есть связь с redis, но это o.k. Это mongoDB-соединение? Но почему он внезапно заблудился?
Единственное, что помогает работать через всю петлю, чтобы выполнить вызов рекурсии в Монго обратного вызова, как это:
setTimeout(function() {
doLoop(it+1, callback_loop);
},1);
Кто там, кто имеет то, что происходит не так здесь идея?
Спасибо, heinob
Вы уверены, что нет другого узла, который работает на одном сервере? попробуйте grep процесс –
Да, есть еще один процесс узла. Но в прошлом они не мешали друг другу. И почему setTimeout-workaround «решает» проблему? – heinob