funktion interrupted
Jeg sidder med et teknisk problem, som jeg håber nogen af de mange intelligente mennesker herinde kan hjælpe mig med :-)Jeg har en funktion 'f' og en optællings-variabel 'i', som behandler et parameter-objekt 'obj'
function f(obj,i){
(Her sker en masse);
i++;
if(i<10)
setTimeout("f(obj,i)",100);
}
Ideelt set vil det derfor tage ca. 1 sekund at køre denne funktion færdig (fra i=0 til i=10). I løbet af denne tid er det objektet 'obj', der bliver behandlet i de ti 'loops'.
Vi forestiller os, at funktionen f bliver kaldt ved f('obj1',0) og 10-loop-kørslen starter.
Nu kan der imidlertid ske det, at funktionen f bliver kaldt fra et andet sted på siden, mens den er ved at gennemføre de ti loops med objektet 'obj1'.
Nu ved jeg så ikke, hvad der helt præcis sker? Men udførslen af igangværende 10-loop-kørsel, stopper spontant, mens det nye kald starter en ny 10-loop-kørsel.
Problemets kerne er således, at den igangværende 10-loop-kørsel af 'obj1' STOPPER, når funktionen kaldes fra et andet sted på siden.
'obj1' bliver således ikke 'færdig-behandlet', idet i ikke når til 10, før den bliver afbrudt af et nyt kald.
Håber mit spørgsmål blev formuleret på et forståeligt dansk, selvom det altid er lettest at forstå som forfatter - og at nogen har tid og lyst til at hjælpe med at få løst problemet.
Jeg har selv tænkt på et par løsningsmuligheder, som jeg dog ikke er tilfredse med:
1) Slam-kode-løsningen:
Jeg kunne lave tre-fire ens funktioner, idet jeg ikke regner med at scriptet bliver kaldt flere gange på det nævnte sekund. Hvis funktion1 er i brug, benyttes funktion2. Hvis denne også er i brug, kaldes funktion3 bare i stedet og så fremdeles.
2) Timer-invasion-løsningen:
I stedet for at timeren ligger i selve funktionen, så laves der ti kald med indbygget timer:
settimeout('f(obj)',100)
settimeout('f(obj)',200)
settimeout('f(obj)',300)
og så fremdeles. Det vil bevirke, at funktionens varighed er uendelig kort og interrupt vil formentlig ikke forekomme. Ulempen er 'de mange timere' :/
Mvh
Martin