假設我有以下查詢功能:輪詢AJAX功能超過調用堆棧
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