73 messaggi dal 16 novembre 2001
Buongiorno a tutti!
Nell'esecuzione del mio codice js chiamo una funzione più volte e vorrei che tra una chiamata e l'altra passino 300 millisecondi. E' assolutamente importante che venga rispettato l'ordine di chiamata. Senza un delay la funzione verrebbe lanciata alla velocità del processore.

Ho realizzato una routine che temporizza con setTimeout la chiamata della funzione ma a volte capita che non venga rispettato l'ordine di chiamata. Avete suggerimenti?

Esempio:
var counterCassa = 0 
var counterDateCassa = new Date() 
var delayCassa = 300 

function SendStrCassa(str){ 
var today = new Date() 
var testDate = counterDateCassa 
testDate.setMilliseconds(testDate.getMilliseconds()+delayCassa); 

if(today>=testDate){counterCassa = 0;counterDateCassa = today;} 
else { 
counterCassa += delayCassa; 
} 

var strOut = str + String .fromCharCode(13) 
var obj = parent.document.getElementById('ACTIVEXCassa'); 
// invio la stringa a un componente activeX 
window.setTimeout(function(){obj.WriteString(strOut);},counterCassa); 
} 

SendStrCassa("Chiamata 1"); 
SendStrCassa("Chiamata 2"); 
SendStrCassa("Chiamata 3"); 
SendStrCassa("Chiamata 4"); 
SendStrCassa("Chiamata 5"); 


Così dovrei avere
Chiamata 1 --> 0
Chiamata 2 --> + 300
Chiamata 3 --> + 600
Chiamata 4 --> + 900
Chiamata 5 --> +1200

Malgrado la sequenza di lancio sia corretta a volte capita che la funzione venga effettivamente lanciata con ritardo e quella successiva sia lanciata prima di quella ritardataria. Non c'è un controllo a valle del setTimeout!
73 messaggi dal 16 novembre 2001
se isolo il codice in un file di test sembra funzionare...Ora sto impazzendo si vede che c'è qualcosa che interagisce con il flusso di esecuzione..non mi viene in mente altro.

Test_file:

<html>
<head>
<script>

var counterCassa = 0 
var counterDateCassa = new Date() 
var delayCassa = 500

function SendStrCassa(str){ 
var today = new Date();
var testDate = counterDateCassa;
testDate.setMilliseconds(testDate.getMilliseconds()+delayCassa); 

if(today>=testDate){counterCassa = 0;counterDateCassa = today;} 
else { 
counterCassa += delayCassa; 
} 
WriteDebug(counterCassa + 'ms ' + str,'red');
window.setTimeout(function(){WriteDebug(counterCassa + 'ms ' + str,'blue');},counterCassa);
} 
function WriteDebug(str,color){
  document.getElementById('t').innerHTML+='<FONT COLOR=' + color + '>' + str + '</FONT><br>';
}
function l(){
  SendStrCassa('Chiamata 1');
  SendStrCassa('Chiamata 2');
  SendStrCassa('Chiamata 3');
  SendStrCassa('Chiamata 4');
  SendStrCassa('Chiamata 5<hr>');
}
</script>
</head>

<body>
<button onclick="l()">Inizia sequenza</button><button onclick="t.innerHTML=''">Azzera sequenza</button><br>
<span id="t"></span><br>

</body>
</html>

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.