setTimeout в цикле.
Есть массив, необходимо его обработать в цикле, но с паузами во время обработки.
Типа for (var i = 0; i < 1000; i++) { setTimeout(function(){ $("#demo").click().delay(1000); console.log('Click'); // Еще код }, 1000); } Необходимо, чтобы код выполнялся через каждую секунду, а не сразу. Куда копать? UPDATE. Думаю вынести код в функцию, а функцию вызывать через SetInterval |
Что это за конструкция
$("#demo").click().delay(1000); я не понял, но обычно так делают var i = 0; function fd () { $("#demo").click() console.log('Click'); // Еще код if (i++ < 1000) setTimeout (fd, 1000) } setTimeout (fd, 1000) Или так const delay = (n) => { return new Promise (res => { let tm = setTimeout (() => res(tm), n); }) } const fd = async () => { for (let i = 0; i < 1000; i++) { await delay(1000); $("#demo").click() console.log('Click'); // Еще код } } fd () // Или await fd() |
const it = cycle(['A', 'B', 'C', 'D', 'E']) let timer1; function* cycle(arr) { let i = 0; while (i < arr.length) yield arr[i++] } (function timer() { timer1 = setTimeout(function () { const cur = it.next(); if (cur.done) { clearTimeout(timer1); } else { console.log(cur.value); timer(); } }, 1000); }()); Вариант с генераторами https://learn.javascript.ru/generator |
Цитата:
полезнее было бы передать какие-то данные: const delay = (ms, data) => new Promise(res => setTimeout(res, ms, data)); delay(1000, 'hello').then(console.log); |
Всем спасибо, по простому сделал, теперь буду разбираться дальше.
|
Часовой пояс GMT +3, время: 14:03. |