首页 > 解决方案 > 如何处理“ RangeError:超出最大调用堆栈大小”

问题描述

我正在开发一个expressAPI。它在我的计算机上运行良好,但在我的服务器上我遇到以下异常:

RangeError:超出最大调用堆栈大小

该代码包括读取约 400000 行的文件。然后它在每一行上循环,并且最多有一个深度为 15 的递归调用。我读过setImmediateprocess.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:在 processLine (/home/sinsedrix/myapi/bigprocess.js:7:30) 在 processLine (/home/sinsedrix/myapi/bigprocess.js:14:17) 处的 String.charAt () 超出了最大调用堆栈大小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/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 (/主页/sinsedrix/myapi/bigprocess.js:14:17)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)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)

标签: javascriptnode.jsexpressstack-overflow

解决方案


推荐阅读