|
| setTimeout og "stack overflow" Fra : Niels Andersen |
Dato : 06-03-01 21:06 |
|
Jeg har lavet en lille funktion, som vil kalde sig selv via setTimeout
indtil operationen lykkes.
Problemet er, at NOGEN gang (måske 10%) kommer fejlmeddelelsen "Stack
overflow at line: ??", hvor linjenummeret er linjen med setTimeout.
Den ser lidt kryptisk ud, men jeg kan ikke lige finde nogen problemer med
den...
function testfunktion(param) {
if ([funktionen kan udføres nu]){
[gør hvad der skal gøres]
} else {
setTimeout('testfunktion(\''+param+'\')',1000);
}
}
"param" er en streng. jeg kan ikke bare skrive 'testfunktion(param)' i
setTimeout, da "param" ikke findes 2. gang funktionen udføres. Altså skriver
jeg den som en "literal"/"constant".
Funktionen bruges til at kommunikere mellem to "windows". Der skal udføres
en funktion i et andet vindue. Dette kan naturligvis først lade sig gøre når
dokumentet er hentet. Derfor skal der forsøges fx. 1 gang i sekundet, indtil
vinduet er loaded og funktionen kan udføres.
Det skal siges at "stack overflow" kommer med det samme, der går ikke så
meget som et halvt sekund. Men et er langt fra hver gang. Jeg kan stå og
reloade den samme side 50 gange, og problemet opstår måske 5 gange.
Mærkeligt...
Mvh.
Niels Andersen
| |
Niels Andersen (09-03-2001)
| Kommentar Fra : Niels Andersen |
Dato : 09-03-01 09:00 |
|
"Niels Andersen" <niels-usenet@myplace.dk> wrote in message
news:kqbp6.538$A35.46795@news000.worldonline.dk...
> Problemet er, at NOGEN gange (måske 10%) kommer fejlmeddelelsen "Stack
> overflow at line: ??", hvor linjenummeret er linjen med setTimeout.
> Den ser lidt kryptisk ud, men jeg kan ikke lige finde nogen problemer med
> den...
>
> function testfunktion(param) {
> if ([funktionen kan udføres nu]){
> [gør hvad der skal gøres]
> } else {
> setTimeout('testfunktion(\''+param+'\')',1000);
> }
> }
Tilfældigvis opdagede jeg at linjenummeret var forkert. Lige pludselig kom
den samme fejl nemlig på linjen med "else", og den kan der sgu ikke opstå
fejl i... :) (når man indrykker korrekt)
Det vist sig at jeg refererede forket til et objekt i if'en. Hvordan det kan
give en "stack overflow" aner jeg ikke. :)
Mvh.
Niels Andersen
| |
|
|