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, время: 18:27. |