Quiero que la llamada del script espere 2 segundos después de cada 5 páginas.
Mis requisitos son que el ciclo for
debe esperar 2 segundos cuando pageData.Number
llegue a la página 5. Básicamente, el ciclo debe esperar 2 segundos después de cada 5 páginas.
No estoy seguro de cómo verificar si la página llega a la página 5 y esperar 2 segundos.
for (var i = 1; i <= pageData.Number; i++) { var pageRequest = $.getJSON(URL, function (data) { if (i % 5 == 0) { sleep(5000); } /* .... */ }).fail(function () { errorPage.push(i); }); } // 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); }
Así es como podría hacerlo: con async/await y sin jQuery.
/** * @summary waits a specified number of seconds * @param {number} [seconds] seconds to wait * @returns {Promise<void>} * @link https://github.com/samliew/se-electionbot/blob/master/src/bot/utils.js#L910 */ const wait = (seconds = 1) => new Promise((r) => setTimeout(r, seconds * 1e3)); /** * Your main function, async */ (async function () { const errorPage = []; const pageData = { Number: 10, }; // Test URL const url = 'https://reqbin.com/echo/get/json'; for (let i = 1; i <= pageData.Number; i++) { // Fetch url const data = await fetch(url).then(response => // Convert data to json, or return null on error response.ok ? response.json() : errorPage.push(i) && null ); // Data exists if(data) { // Do something with data console.log(`Request ${i} completed.`); } // Short wait after every fifth request if (i % 5 === 0) { console.log('Waiting for 2 seconds...'); await wait(2); } } console.log('Done!'); })();
Creo que necesitas algo como esto. Utiliza el operador de resto de JavaScript y una función de suspensión personalizada.
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); }