Digamos que tengo algunos datos que necesito obtener del servidor cada 10 segundos. Tendría una función que obtiene los datos a través de AJAX y luego llamar a setTimeout a llamar a esta función una vez más:¿Una llamada de función recursiva 'setTimeout' eventualmente matará al motor JS?
function GetData(){
$.ajax({
url: "data.json",
dataType: "json",
success: function(data){
// do somthing with the data
setTimeout(GetData, 10000);
},
error: function(){
setTimeout(GetData, 10000);
}
});
}
Si alguien sale de la página web abierta todo el día, se podría obtener miles de llamadas a funciones recursivas.
No quiero utilizar setInterval porque eso no tiene en cuenta el retraso de la red. Si la red está ocupada y toma 15 segundos procesar la solicitud, no quiero volver a preguntar antes de obtener el tiempo de espera de AJAX.
¿Cuál es la mejor manera de manejar una función que necesita ser llamada periódicamente?
cada llamada posterior a GetData será completamente independientes entre sí. Después de que se complete cualquier ejecución de ejecución de GetData, se destruirá su contexto y se creará una nueva cuando expire el temporizador. –
esto probablemente causaría problemas para el servidor mucho antes del javascript del lado del cliente. como los otros han mencionado, no tienes un problema de pila de llamadas porque el setTimeout permite que la función regrese y se elimine de la pila. Recursión algorítmica, pero no en realidad. – aepheus
Esta pregunta es exactamente lo que estoy investigando. Gracias por traerlo aquí. – shaosh