Предположим, что у меня есть следующие функции опроса:функция опроса Аякса превышает стек вызовов
function pollingFunc(taskId){
setTimeout(function() {
$.ajax({
url: '/endpoint',
type: 'POST',
data: { 'celery_task_id': taskId },
success: function(response){
if(response.celery_ready) {
console.log('CELERY IS READY')
} else {
console.log('polling')
pollingFunc(response.task_id)
}
}
})
}, 5000);
}
Когда я вызываю его, обратный вызов никогда не вызывается, или это может быть, но мои console.logs никогда не появляются. Вместо этого через некоторое время я получаю
Uncaught RangeError: Maximum call stack size exceeded
Таким образом, моя функция работает рекурсивно, но так, как хотелось бы. Я бы надеялся на аренду консольного журнала, прежде чем мои рекурсивные вызовы начнут печатать на консоли, но это не так. Я подтвердил, что моя базовая конечная точка работает правильно и возвращает json, поэтому я подозреваю, что в моем javascript-коде есть что-то, что мне не хватает. У кого-нибудь есть идея?
Я бы добавил обработчик ошибок и 'console.log', что бы там ни появилось? Вы подтвердили на панели сети, что получаете ответ 200? – winhowes
Не уверен, что это поможет, но вы можете столкнуться с проблемой с console.log, упомянутым здесь: http://stackoverflow.com/questions/8395718/javascript-funky-array-mishap. – Blue
В вашем коде нет рекурсии в смысле вложенных вызовов функций. 'setTimeout' является асинхронным, и поэтому' $ .ajax'. Никакое выполнение 'pollingFunc' не имеет другого' pollingFunc' в стеке вызовов. Что-то еще происходит, что не показано в вашем вопросе. – Igor