Por que setInterval chamar uma função com argumentos aleatórios?
-
01-07-2019 - |
Pergunta
Então, eu estou vendo um problema curioso. Se eu tiver uma função
// 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
}
Esta função pode ser chamado explicitamente por acção do utilizador, caso em que chartId
é transmitido como um argumento, e o gráfico é mostrado seleccionado; ou pode estar no modo de reprodução automática, caso em que ele é chamado por um setInterval
que é inicializado pelo seguinte:
var cycleId = setInterval(cycleCharts, 10000);
O estranho é, na verdade estou vendo o cycleCharts()
obter um argumento chartId
mesmo quando ele é chamado de setInterval
! O setInterval
nem sequer tem quaisquer parâmetros para passar para a função cycleCharts
, por isso estou muito confuso quanto ao porquê chartId
não é indefinido quando cycleCharts
é chamado a partir do setInterval
.
Solução
setInterval está alimentando cycleCharts real dados de tempo (assim pode-se calcular o tempo real que correu e utilização para produzir uma resposta menos empolado, principalmente prático em animação)
Você quer
var cycleId = setInterval(function(){ cycleCharts(); }, 10000);
(este comportamento pode não ser padronizado, por isso não contar com ele muito fortemente)
Outras dicas
Ele diz-lhe quantos milissegundos atrasado o retorno de chamada é chamado.
= var cycleId setInterval (cycleCharts, 10000, 4242);
A partir do terceiro parâmetro em diante - eles são passados ??para a função assim no meu exemplo de enviar 4242 como o chartId. Eu sei que isso pode não ser a resposta para a pergunta que você colocou, mas talvez a solução para o seu problema? Eu acho que o valor que ele recebe é apenas aleatório de qualquer mentiras na pilha no momento da passagem / chamando o método.