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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top