Home > other >  How to make JavaScript call wait for 2 seconds after every 5 pages
How to make JavaScript call wait for 2 seconds after every 5 pages

Time:02-08

I want the script call to wait for 2 seconds after every 5 pages.

My requirements are that the for loop should wait for 2 seconds when pageData.Number reaches to page 5. So basically, the loop should wait for 2 seconds after every 5 pages.

Not sure how to check if the page reaches to page 5 and wait for 2 seconds. Please help.

for (var i = 1; i <= pageData.Number; i  ) {
                //setTimeout(func, 2000);              
                var pageURL = Url   "?startDate="   moment(startDate).format(dateFormat)   "&endDate="   moment(endDate).add(1, 'day').format(dateFormat)   "&pageNumber="   i;
                console.log("calling: "   pageURL);
                var pageRequest = $.getJSON(pageURL, function (data) {
                    if (i % 5 == 0) {
                        sleep(5000);
                    }
                    requestsProcessed  ;                   
                    medArray = data.Medications;
                    for (var j = 0; j < medArray.length; j  ) {
                        counter  ;
                        updateProgress(counter, data.TotalNumber);
                        medicationArray.push(medArray[j]);
                    }

                }).fail(function () {
                    errorPage.push(i);                   
                });
                console.log("completed for "   pageURL   " in "   new Date());

            }

    // from https://www.sitepoint.com/delay-sleep-pause-wait/
    function sleep(milliseconds) {
      const date = Date.now();
      let currentDate = null;
      do {
        currentDate = Date.now();
      } while (currentDate - date < milliseconds);
    }   
    
         

   

CodePudding user response:

You could use the modulus operator for this, calling a function every 5th iteration of the loop. Keep in mind that setTimeout is asynchronous in the parent context

for (var i = 1; i <= pageData.Number; i  ) {
  if (i % 5 === 0) {
    // setTimeout(func, 2000);
  }
  ...
}

CodePudding user response:

I think you need something like this. It uses javascript remainder operator and a custom sleep function.

for (var i = 1; i <= pageData.Number; i  ) {
  //setTimeout(func, 2000);              
  var pageURL = Url   "?startDate="   moment(startDate).format(dateFormat)   "&endDate="   moment(endDate).add(1, 'day').format(dateFormat)   "&pageNumber="   i;               
  var pageRequest = $.getJSON(URL, function (data) {
  if (i % 5 == 0) {
    sleep(2000);
  }
}

// from https://www.sitepoint.com/delay-sleep-pause-wait/
function sleep(milliseconds) {
  const date = Date.now();
  let currentDate = null;
  do {
    currentDate = Date.now();
  } while (currentDate - date < milliseconds);
}

  •  Tags:  
  • Related