Я разрабатываю express
API. Он хорошо работает на моем компьютере, но на моем сервере встречается следующее исключение:
RangeError: Превышен максимальный размер стека вызовов
Код состоит в чтении файла ~ 400000 строк. Затем он зацикливается на каждой строке и имеет рекурсивный вызов глубиной не более 15. Я читал о setImmediate
и process.nextTick
, но я не уверен, как или где их использовать.
Есть идеи о том, что происходит и как это исправить?
Я уже пробовал изменить размер стека (до размера моего файла), но это не решает эту проблему. Я полагаю, это скорее структурная проблема.
Пример кода
const bigProcess = () => {
const processLine = (line) => {
let l = line && line.charAt(0);
if (l) {
if (line.length > 1) {
processLine(line.substring(1));
} else {
console.log('line processed.');
}
}
};
var data = fs.readFileSync("myfile.txt", "utf-8");
var lines = data.toString().split("\r\n");
for (var line of lines) {
processLine(line);
}
};
Вот мой полный вывод:
RangeError: Максимальный вызов превышен размер стека в String.charAt () в processLine (/home/sinsedrix/myapi/bigprocess.js:7:30) в processLine (/home/sinsedrix/myapi/bigprocess.js:14:17) в processLine (/home/sinsedrix/myapi/bigprocess.js:14:17) в processLine (/home/sinsedrix/myapi/bigprocess.js:14:17) в processLine (/ home / sinsedrix / myapi / bigprocess) . js: 14: 17) в processLine (/home/sinsedrix/myapi/bigprocess.js:14:17) в processLine (/home/sinsedrix/myapi/bigprocess.js:14:17) в processLine (/home/sinsedrix/myapi/bigprocess.js:14:17) в processLine (/home/sinsedrix/myapi/bigprocess.js:14:17) в processLine (/ home / sinsedrix / myapi / bigprocess) . js: 14: 17) в processLine (/home/sinsedrix/myapi/bigprocess.js:14:17) в processLine (/home/sinsedrix/myapi/bigprocess.js:14:17) в processLine (/ home / sinsedrix / myapi / bi gprocess. js: 14: 17) в processLine (/home/sinsedrix/myapi/bigprocess.js:14:17) в processLine (/home/sinsedrix/myapi/bigprocess.js:14:17) в processLine (/home/sinsedrix/myapi/bigprocess.js:14:17) в processLine (/home/sinsedrix/myapi/bigprocess.js:14:17) в processLine (/ home / sinsedrix / myapi /) bigprocess. js: 14: 17) в processLine (/home/sinsedrix/myapi/bigprocess.js:14:17) в processLine (/home/sinsedrix/myapi/bigprocess.js:14:17) at processLine (/home/sinsedrix/myapi/bigprocess.js:14:17)