Perché setInterval chiama una funzione con argomenti casuali?
-
01-07-2019 - |
Domanda
Quindi, vedo un problema curioso.Se ho una funzione
// counter wraps around to beginning eventually, omitted for clarity.
var counter;
cycleCharts(chartId) {
// chartId should be undefined when called from setInterval
console.log('chartId: ' + chartId);
if(typeof chartId == 'undefined' || chartId < 0) {
next = counter++;
}
else {
next = chartId;
}
// ... do stuff to display the next chart
}
Questa funzione può essere chiamata esplicitamente dall'azione dell'utente, nel qual caso chartId
viene passato come argomento e viene mostrato il grafico selezionato;oppure può essere in modalità di riproduzione automatica, nel qual caso viene chiamato da a setInterval
che viene inizializzato come segue:
var cycleId = setInterval(cycleCharts, 10000);
La cosa strana è che in realtà sto vedendo il file cycleCharts()
prendi un chartId
argomento anche quando viene chiamato da setInterval
!IL setInterval
non ha nemmeno parametri da passare al file cycleCharts
funzione, quindi sono molto sconcertato sul perché chartId
non è indefinito quando cycleCharts
è chiamato dal setInterval
.
Soluzione
setInterval fornisce a cycleCharts i dati temporali effettivi (in modo da poter calcolare il tempo effettivo in cui è stato eseguito e utilizzarlo per produrre una risposta meno artificiosa, per lo più pratica nell'animazione)
tu vuoi
var cycleId = setInterval(function(){ cycleCharts(); }, 10000);
(questo comportamento potrebbe non essere standardizzato, quindi non fare troppo affidamento su di esso)
Altri suggerimenti
Ti dice con quanti millisecondi di ritardo viene chiamata la richiamata.
var cycleId = setInterval(cycleCharts, 10000, 4242);
Dal terzo parametro in poi, vengono passati alla funzione, quindi nel mio esempio invii 4242 come chartId.So che potrebbe non essere la risposta alla domanda che hai posto, ma potrebbe essere la soluzione al tuo problema?Penso che il valore che ottiene sia semplicemente casuale da qualunque cosa si trovi nello stack al momento del passaggio/chiamata del metodo.