Naudoju "JavaScript" bibliotekos failą "Direct Web Remoting" (DWR) ir gaunu klaidą tik "Safari" (darbalaukyje ir "iPad")
Joje rašoma
Viršytas maksimalus skambučių kamino dydis.
Ką tiksliai reiškia ši klaida ir ar ji visiškai sustabdo apdorojimą?
Be to, ar galima ištaisyti Safari
naršyklės klaidas (iš tikrųjų iPad Safari
naršyklėje rašoma
JS:vykdymas viršijo laiko limitą
o tai, kaip spėju, yra ta pati iškvietimų steko problema)
Tai reiškia, kad kažkur savo kode iškviečiate funkciją, kuri savo ruožtu iškviečia kitą funkciją ir t. t., kol pasiekiama iškvietimų kamino riba.
Beveik visada taip atsitinka dėl rekursinės funkcijos, kurios bazinis atvejis nėra tenkinamas.
Apsvarstykite šį kodą...
(function a() {
a();
})();
Štai stekas po keleto iškvietimų...
Kaip matote, skambučių stekas auga, kol pasiekia ribą: naršyklės kietai užkoduotą steko dydį arba atminties išsekimą.
Norėdami tai ištaisyti, įsitikinkite, kad jūsų rekursinė funkcija turi bazinį atvejį, kurį galima įvykdyti...
(function a(x) {
// The following condition
// is the base case.
if ( ! x) {
return;
}
a(--x);
})(10);
Kartais taip gali atsitikti, jei netyčia du kartus importuojate / įterpiate tą patį "JavaScript" failą, verta patikrinti Inspektoriaus išteklių skirtuke.
Jūsų kode yra rekursinis ciklas (t. y. funkcija, kuri galiausiai vėl ir vėl kviečia save, kol stekas užsipildo).
Kitose naršyklėse kaminai yra didesni (todėl vietoj jų gaunamas laiko limitas) arba dėl kokių nors priežasčių klaida nutylima (galbūt blogai patalpinta "try-catch").
Naudodami derintuvą patikrinkite iškvietimo steką, kai įvyksta klaida.