每隔5页提取一次后,让循环等待2秒钟



我希望脚本调用在每5页之后等待2秒。

我的要求是,当pageData.Number到达第5页时,for循环应该等待2秒。因此,基本上,循环应该在每5页之后等待2秒。

不知道如何检查页面是否到达第5页并等待2秒。

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

以下是使用async/await和不使用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 () {

// Variables, from your question
const errorPage = [];
const pageData = {
Number: 10,
};
// test json endpoint, you can substitute this with an array
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!');
})(); // end main function

我想你需要这样的东西。它使用javascript余数运算符和自定义睡眠函数。

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

最新更新