Javascript: ожидание одного (или нескольких) условия в цикле For - PullRequest
0 голосов
/ 05 октября 2019

Я хочу проверить условие для k раз, чтобы значение было истинным, внутри цикла For, каждый раз, когда я хочу ждать 2 секунды, после этого я хочу перейти к следующей итерации цикла. Например, я попробовал что-то вроде ниже -

var k = 0;
for (let i = 0; i < B.length; i++) {
  setTimeout(function F_stTimer() {
      if (B[i].innerText === "S") {
        var A = "True"; //just for example
        if (A === true && k == 0) {
          // Do something
          k = k + 1;
          i = i - 1; // so , I can check the ith element again once start the loop again
        } //if
        else if (A === true && k > 0 && k < 5) { //checking 5 times for A to be false

          k = k + 1;

        }, i * 2000);
      i = i - 1;
    } //if
    else if (A === true && k == 5) {
      k = 0;
    } //if

  } // if 
}, 5000);
} // i loop

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

В любом случае, кто-нибудь может мне помочь с проблемой, с которой я столкнулся?

Не нужно следовать тому, как я упоминал выше, я хочу сделать следующее:

проверять условие для k раз, чтобы значение было истинным, внутри цикла For каждый раз, когда я хочу подождать t секунд (длительность каждой задержки / интервал задержки), после этого я хочу перейти к следующей итерациидля цикла.

Комментарий Плз для дальнейшего уточнения.

Ответы [ 2 ]

1 голос
/ 05 октября 2019

Вы можете взять интервал и проверить счетчик.

var counter = 0,
    interval = setInterval(function () {
        counter++;
        if (counter === 5) {
            counter = 0;
            console.log('five');
        } else {
            console.log('not five');
        }
    }, 1000);
0 голосов
/ 05 октября 2019

Вы можете написать функцию, которая принимает два аргумента:

  1. howManyTimes - сколько раз вы хотите выполнить итерацию

  2. howOften - в чеминтервалы, которые вы хотите сделать проверку (в миллисекундах)

function checkInIntervals(howManyTimes, howOften) {
	var counter = 0;
  
	var interval = setInterval(function() {
        counter++;
        if (counter === howManyTimes) {
    	    clearInterval(interval);
        }
  	    // do something
        console.log(counter, 'iteration')
    }, howOften)
}

// run the function
checkInIntervals(10, 2000);

Внутри интервала счетчик увеличивается, и когда он равен требуемому количеству итераций, интервал очищается и выполнение останавливается.

...