Javascript для l oop с изменением времени ожидания - PullRequest
0 голосов
/ 13 февраля 2020

Так что я пытаюсь увеличить время ожидания в течение l oop, я следовал за ответом здесь setTimeout с L oop в JavaScript, но продолжительность setTimeout просто не работает в миллисекундах при выводе даты для проверки разницы во времени.

Код:

for (var count = 0; count < 12; count++) {
    (function(num){setTimeout(function() {
        console.log("Count = " + num + " Time: " + 1000 * num + " Stamp: " + new Date());
    }, 1000 * num)})(count);
}

Как вы можете видеть в консоли, она все еще запускает console.log каждые 1000 вместо 1000 * count.

Я надеюсь, что выше имеет смысл и, надеюсь, кто-то может объяснить это поведение.

Ответы [ 2 ]

2 голосов
/ 13 февраля 2020

Это то, что вы ищете? Увеличьте время для каждой итерации 1 секунда * некоторое количество

let i = 0;
loop = () => {
  setTimeout(() => {
    console.log("Count = " + i + " Time: " + 1000 * i);
    i++;
    if (i < 10) {
      loop();
    }
  }, i * 1000)
};
loop();

Здесь есть REPL , вы можете нажать run

Объяснение: Попробуйте запустить этот код

for (var i = 1; i < 5; i++) {
    setTimeout(() => console.log(i), 1000)
} 

Мы ожидаем, что на выходе будет 1 2 3 4, но на самом деле это 5 5 5 5, потому что js двигатель времени выполнения не ожидает завершения установленного времени ожидания, а передает его на веб-API и он находится там в очереди, поэтому для l oop сначала выполняется i = 5, а в более поздний момент времени веб-API запускает функцию установленного времени ожидания. Подробнее об этом можно узнать здесь .

2 голосов
/ 13 февраля 2020

Код работает, как и ожидалось.

Все таймеры настроены практически одновременно, поскольку они асинхронны c. Таким образом, таймеры установлены, и код продолжает загружать другие таймеры, не дожидаясь выполнения кода.

Первый таймер будет go выключен через 1 секунду.

Второй таймер go выключится через 2 секунды. Но через две секунды после того, как таймер был установлен, это то же самое время, в которое был установлен таймер 1.

И т. Д.

Итак, каждый таймер срабатывает со счетом 1000 *.

...