Я новичок в Node.JS и застрял с ошибкой EMFILE. Я пытаюсь поймать исключение EMFILE и обработать его в коде.
Кажется, есть много вопросов об ошибке «Ошибка: EMFILE, слишком много открытых файлов», но большинство ответов похоже на «Увеличить ваш предел».
Мой первый вопрос: как мне поймать это исключение? Когда я запускаю приведенный ниже код с многими соединениями, возникает ошибка EMFILE:
stream = net.createConnection(port, host);
stream.addListener('connect', function() {
return stream.write(request);
});
stream.addListener('data', function(data) {
return console.log(data);
});
stream.addListener('end', function() {
stream.end();
return callback();
});
stream.addListener('timeout', function() {
stream.destroy();
console.log("timeout");
return callback();
});
stream.addListener('error', function(e) {
console.log("this never gets called");
return
});
Исключение не перехватывается в прослушивателе ошибок. Я попытался обернуть вышеупомянутое в try{} catch (e) {}
, и ничего не происходит. Я использовал метод обратного вызова для createConnection, и он не возвращает никаких ошибок.
Единственный способ, которым я смог поймать исключение, это:
process.on('uncaughtException', function(err) {
console.log(err);
});
что кажется небезопасным, учитывая, что все ловит.
Итак, мой второй вопрос: каков "лучший метод", чтобы перехватить ошибку и повторить вызов?
Я смотрел на:
https://github.com/isaacs/npm/blob/master/lib/utils/graceful-fs.js
а также
Простой прокси-узел nodejs http завершается с «слишком большим количеством открытых файлов»
в качестве ссылок, но я не уверен, как применить метод изящный из npm к вызову createConnection.
Большое спасибо!