Feil ved overskridelse av maksimal anropsstabelstørrelse
Jeg bruker en Direct Web Remoting (DWR) JavaScript-biblioteksfil og får bare en feil i Safari (desktop og iPad).
Det står
Maksimal anropsstabelstørrelse overskredet.
Hva betyr denne feilen nøyaktig, og stopper den behandlingen helt?
Også enhver løsning for Safari
nettleser (faktisk på iPad Safari
, står det
JS: utførelse overskredet tidsavbrudd
som jeg antar er det samme anropsstabelproblemet)
473
3
Det betyr at et eller annet sted i koden din kaller du en funksjon som igjen kaller en annen funksjon og så videre, til du treffer call stack-grensen.
Dette er nesten alltid på grunn av en rekursiv funksjon med en base case som ikke blir oppfylt.
Visning av stakken
Tenk på denne koden...
Her er bunken etter en håndfull samtaler...
Som du kan se, vokser anropsstakken til den treffer en grense: nettleserens hardkodede stakkstørrelse eller minneutmattelse.
For å fikse det, sørg for at den rekursive funksjonen din har et grunntilfelle som kan oppfylles ...
Du kan noen ganger få dette hvis du ved et uhell importerer/bygger inn den samme JavaScript-filen to ganger, verdt å sjekke i ressursfanen i inspektøren.
Det er en rekursiv løkke et sted i koden din (dvs. en funksjon som til slutt kaller seg selv igjen og igjen til stakken er full).
Andre nettlesere har enten større stabler (slik at du får en timeout i stedet) eller de svelger feilen av en eller annen grunn (kanskje en dårlig plassert try-catch).
Bruk feilsøkingsprogrammet til å sjekke anropsstakken når feilen oppstår.