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)) 

       

网上收集的解决方案 "nodeJs巨大的数组处理抛出RangeError:超过最大调用堆栈大小"

问题是你正在进行许多函数调用。 将stack-size设置为更高的值只会增加您可以处理的项目数量,而不能解决实际问题。

你直接从你的函数调用下一个迭代,这使得它是一个recursion函数。 由于它是通过async因此有点难以发现。

这个代码应该工作:

 var tifPreview = function (item, callback) { console.log(item); // defer the callback setImmediate(callback); } 

在这里阅读更多关于setImmediate函数: http : setImmediate

一个选项可以传递--max-stack-sizenode

 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