我已经有same question as earlier,但无法将答案与我的代码相关联。这是我的错误:RangeError: Maximum call stack size exceeded
。Node.js最大调用堆栈超出
我的代码的高度简化的伪版本是这样的:
function make_request(url, other_params){
request(url, function(response){
if(something) var some_var = 'some value';
else var some_var = '';
//do something with response to generate, some_var, and insert into DB
var my_arr = [some_var];
connection.query('INSERT my_table SET name = ?', my_arr, function(err, rows, fields) {
if(my_arr==''){
// generate new url to make new request
make_request(url, other_params);
}
});
});
}
connection.query('SELECT * from my_table', function(err, rows, fields){
var len =rows.length;
for(var i = 0; i < len; i++){
var url = rows[i].url;
make_request(url, other_params);
}
});
我已经试过包装在setImmediate
内部make_request
或setTimeout
其中包括一些其他的黑客,但似乎没有任何防止调用堆栈错误。我可以添加任何可以使其工作的库。任何想法将不胜感激。
这里有太多的伪代码来查看真正发生了什么。我们需要看到REAL代码。因为你在你的问题中有代码,所以它几乎没有做任何事情,因为if(my_arr =='')'永远不会成真,所以代码做了几个数据库查询并且从不做任何结果。到目前为止,没有什么可看的。我不认为这个代码会产生你的错误。还有比你在这里展示的更多。 – jfriend00
Jfriend00 my_arr ==''将在50%的时间内为真。这有帮助吗? –
我的代码超长,但它基本上是一个涉及一个http请求的函数,它通常在它自己内部被调用。是不是有一个通用的解决方案? –