Увеличение интервала setTimeout в Javascript - PullRequest
0 голосов
/ 12 февраля 2020

Итак, у меня есть полностью базовый c html файл. То, что я хотел бы сделать, это выбрать случайное число 0-100 с интервалом, увеличивающимся при каждом прогоне, так как я хотел, чтобы это было для l oop go, выполняя код при каждом запуске, так setTimeout увеличивает задержку каждый раз. Я получаю очень быстрый пробег с одинаковой задержкой. Мой код, который может объяснить немного дальше, выглядит следующим образом:

for ( i = 0; i < Math.floor( Math.random() * 2000 ); i+=100 ) { 
  setTimeout( () => { 
    document.body.innerHTML = ( Math.random() * 101 );
  }, i );
}

Причина, по которой я хочу, чтобы это было сделано так, заключается в том, что код в конечном итоге имеет точку остановки.

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Необъявленные переменные всегда глобальны

Объявите переменную i с let, это создаст локальную область блока переменная и сохранит текущее значение итерации в функции:

for (let i = 0; i < Math.floor( Math.random() * 2000 ); i+=100 ) { 
  setTimeout( () => { 
    //document.body.innerHTML += ( Math.random() * 101 );
    console.log(i);
  }, i );
}
0 голосов
/ 12 февраля 2020

Ваш l oop, кажется, не отражает то, что вы хотите сделать.

Вы инициализируете i в 0

Хотя i меньше (случайное число меньше 2000)

Установите время на i миллисекунды (0, 100, 200, 300 ...)

Добавьте 100 к i.

Попробуйте это:

let random = Math.floor(Math.random() * 2000)
let counter = 10 // number of times to run
for (let i = 0; i < counter; i++) {
  setTimeOut (() => {
    // Do something
  }, random)
  let random += Math.floor(Math.random() * 2000)
}
...