nodeJs巨大的数组处理抛出RangeError:超过最大调用堆栈大小
这是进行大量条目的代码的一部分(最初是与文件系统一起工作,并且使用文件进行一些操作)。 有什么好的方法来绕过限制,并防止引发RangeError:超过最大调用堆栈大小 (至今,它允许我迭代大约3000项)
var async = require('async') , _u = require('underscore') var tifPreview = function (item, callback) { console.log(item) return callback(); } var tifQueue = async.queue(tifPreview, 2) tifQueue.push(_u.range(0, 5000, 1))
问题是你正在进行许多函数调用。 将stack-size
设置为更高的值只会增加您可以处理的项目数量,而不能解决实际问题。
你直接从你的函数调用下一个迭代,这使得它是一个recursion函数。 由于它是通过async
因此有点难以发现。
这个代码应该工作:
var tifPreview = function (item, callback) { console.log(item); // defer the callback setImmediate(callback); }
在这里阅读更多关于setImmediate
函数: http : setImmediate
一个选项可以传递--max-stack-size
到node
。
node --max-stack-size 32000 app.js
作为参考,使用node -h
--max-stack-size=val
设置最大值v8堆栈大小(字节)
更新
即使帮助将其打印为--max-stack-size
,在node -v
v0.10.x
+中,您需要使用--stack-size
。
node --stack-size=32000 app.js