Estoy utilizando un archivo de la biblioteca JavaScript de Direct Web Remoting (DWR) y estoy recibiendo un error sólo en Safari (escritorio y iPad)
Dice
Se ha excedido el tamaño máximo de la pila de llamadas.
Qué significa exactamente este error y si se detiene el procesamiento por completo?
También cualquier arreglo para el navegador Safari
(En realidad en el iPad Safari
, dice
JS: la ejecución ha superado el tiempo de espera
que supongo que es el mismo problema de la pila de llamadas)
Significa que en algún lugar de tu código, estás llamando a una función que a su vez llama a otra función y así sucesivamente, hasta que llegas al límite de la pila de llamadas.
Esto es casi siempre debido a una función recursiva con un caso base que no se está cumpliendo.
Considere este código...
(function a() {
a();
})();
Aquí está la pila después de un puñado de llamadas...
Como puedes ver, la pila de llamadas crece hasta que alcanza un límite: el tamaño de la pila codificado por el navegador o el agotamiento de la memoria.
Para solucionarlo, asegúrate de que tu función recursiva tiene un caso base que se puede cumplir...
(function a(x) {
// The following condition
// is the base case.
if ( ! x) {
return;
}
a(--x);
})(10);
Hay un bucle recursivo en alguna parte de tu código (es decir, una función que finalmente se llama a sí misma una y otra vez hasta que la pila está llena).
Otros navegadores tienen pilas más grandes (por lo que se obtiene un tiempo de espera en su lugar) o se tragan el error por alguna razón (tal vez un try-catch mal colocado).
Utiliza el depurador para comprobar la pila de llamadas cuando se produce el error.