Поскольку я не мог комментировать, я вынужден написать этот пост. Я получил следующий код, который задерживает / ждет ровно 1 секунду или 1000 миллисекунд -
let n = 5;
for (let i=1; i<n; i++)
{
setTimeout( function timer()
{
console.log("hello world");
}, i*1000 );
}
Но как я могу отложить это на 1000 секунд вместо фиксированных 1000 миллисекунд, чтобы ожидание зависело от номера итерации?
Например, если n = 5, то я хочу, чтобы задержка цикла составляла 1 секунду в 1-й итерации. 2 секунды во второй итерации и т. Д. Окончательная задержка составит 5 секунд.
javascript
wait
Майк
источник
источник
i
- если вы этого не сделаете, то вы получите все эти оповещения одновременно .Ответы:
Вот функция, которая будет отображаться немедленно, затем через 1 секунду, через 2 секунды после, через 3 секунды после этого и т. Д. Никакой специальной математики, никаких обещаний не требуется
источник
Хотя эту задачу можно решить с помощью обещаний, реактивных потоков и других интересных инструментов (эй, никто еще не предлагал использовать рабочих!), Ее также можно решить с помощью небольшой арифметики.
Таким образом, вы хотите тайм-ауты в последовательности: 1 с, предыдущий + 2 с, предыдущий + 3 с и так далее. Эта последовательность: 1, 3, 6, 10, 15 ... и ее формула
a[n] = n * (n + 1) / 2
. Знаю это...источник
Вы можете попробовать использовать async / await (Promises) для сериализации вашего кода:
источник
Мне понадобилось время, чтобы расшифровать твой вопрос xD, но ты этого хочешь?
Это будет продолжать запускать console.log с задержкой i * 1000 каждый раз. поэтому в первый раз это будет 1 секунда (1 * 1000), затем это будет 2 секунды и так далее.
источник
Цикл не ожидает завершения функции тайм-аута. Таким образом, когда цикл запускается, он планирует ваше оповещение для каждого индекса.
Вы можете использовать функцию, которая будет работать в соответствии с вашим индексом, но по расписанию одновременно. Вы можете почувствовать разницу в 3 секунды.
источник
Используйте рекурсивные вызовы вместо цикла for
источник