Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   setTimeout в цикле. (https://javascript.ru/forum/jquery/81564-settimeout-v-cikle.html)

savsoft 16.12.2020 04:41

setTimeout в цикле.
 
Есть массив, необходимо его обработать в цикле, но с паузами во время обработки.

Типа

for (var i = 0; i < 1000; i++) {
		setTimeout(function(){ 
			$("#demo").click().delay(1000);
			console.log('Click');
			// Еще код
		}, 1000);
	}


Необходимо, чтобы код выполнялся через каждую секунду, а не сразу.

Куда копать?

UPDATE.

Думаю вынести код в функцию, а функцию вызывать через SetInterval

voraa 16.12.2020 07:31

Что это за конструкция
$("#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()

Vlasenko Fedor 16.12.2020 10:57

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

Alexandroppolus 16.12.2020 14:32

Цитата:

Сообщение от voraa
let tm = setTimeout (() => res(tm), n);

просто интересно - зачем в then получать ссылку на отработавший таймер? :)

полезнее было бы передать какие-то данные:
const delay = (ms, data) => new Promise(res => setTimeout(res, ms, data));

delay(1000, 'hello').then(console.log);

savsoft 16.12.2020 17:45

Всем спасибо, по простому сделал, теперь буду разбираться дальше.


Часовой пояс GMT +3, время: 14:03.