Angenommen, ich habe die folgende Abfrage-Funktion:Polling Ajax-Funktion wird von über Call-Stack
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);
}
Als ich es aufrufen, den Erfolg Rückruf nie aufgerufen wird, oder es könnte sein, aber mein console.logs nie erscheinen. Statt nach einer Weile bekomme ich
Uncaught RangeError: Maximum call stack size exceeded
Also meine Funktion rekursiv ausgeführt wird, sondern in der Art und Weise, dass ich es will. Ich würde zumindest hoffen, das Konsolenprotokoll vor dem Start meiner rekursiven Aufrufe in der Konsole auszudrucken, tut es aber nicht. Ich habe bestätigt, dass mein Backend-Endpunkt korrekt funktioniert und json zurückgibt, also vermute ich, dass etwas in meinem JavaScript-Code fehlt. Hat jemand eine Idee?
Ich würde auch einen Fehlerhandler hinzufügen und 'console.log' was kommt da rein? Haben Sie im Netzwerk-Panel bestätigt, dass Sie eine Antwort von 200 erhalten? – winhowes
Nicht sicher, ob dies hilft, aber Sie möglicherweise auf das Problem mit console.log erwähnt hier: http://stackoverflow.com/questions/8395718/javascript-funky-array-mishap. – Blue
Es gibt keine Rekursion in Ihrem Code im Sinne von geschachtelten Funktionsaufrufen. 'setTimeout' ist asynchron und auch' $ .ajax'. Keine 'pollingFunc'-Ausführung hat einen weiteren' pollingFunc' im Aufruf-Stack. Es läuft noch etwas anderes, das wird in Ihrer Frage nicht angezeigt. – Igor