У меня есть 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);
}
});
Я попытался обертывание внутренней make_request
в setImmediate
или setTimeout
среди нескольких других хаков, но ничего не кажется, чтобы предотвратить ошибку стеки вызовов. Я могу добавить любую библиотеку, которая сделает эту работу. Любые мысли были бы оценены.
Здесь слишком много псевдо-кода, чтобы узнать, что происходит на самом деле. Нам нужно увидеть код REAL. Поскольку у вас есть код в вашем вопросе, он вряд ли что-то делает, потому что 'if (my_arr == '')' никогда не будет истинным, поэтому код делает несколько запросов БД и никогда ничего не делает с результатами. Пока ничего не видно. Я не думаю, что этот код создаст вашу ошибку. Там больше, чем вы здесь. – jfriend00
Jfriend00 my_arr == '' будет правдой в 50% случаев. Это полезно? –
Мой код очень длинный, но это в основном одна функция, включающая HTTP-запрос, который часто вызывает внутри себя. Разве нет обобщаемого решения? –