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);
}