0

Объясните, пожалуйста, как работают асинхронные вызовы цикле

for(let i=0;i<10;i++){
setTimeout(()=>console.log(i),5000)
}

Непонятно почему значения i не выводятся каждые 5 секунд,а выводятся все цифры от 0 до 9 спустя 5 секунд.

1 Answers1

3

Вы в плотном цикле (сразу) заказываете десять отложенных действий, которые должны произойти через пять секунд. Вот они все и происходят через пять секунд.

for (let i = 0; i < 10; i++) {
  setTimeout(() => console.log(i), 1000 * (i + 1))
}
  • Простите, не могли бы Вы объяснить почему так! Не понимаю.. – Domosed_007 Oct 02 '20 at 21:14
  • @Domosed_007 Что "так"? Вам придется постараться сформулировать точнее, что Вы не понимаете в тексте ответа. –  Oct 02 '20 at 21:16
  • Дело в том, что только начал разбираться с асинхрощиной в js, и непонятно почему setTimeout(()=>console.log(i),5000) - не работает, а так: setTimeout(() => console.log(i), 1000 * (i + 1)) - работает – Domosed_007 Oct 02 '20 at 21:20
  • @Domosed_007 Потому что i увеличивается с каждой итерацией цикла. Первое действие должно произойти через одну секунду (1000 * (0 + 1)), второе - через две (1000 * (1 + 1)), и так далее. –  Oct 02 '20 at 21:23