Поэтому я пытаюсь запрограммировать таймер, который будет выполняться каждый час. Первый setInterval должен получить список элементов из веб-API, затем следующий таймер будет выполняться каждую секунду, и в этом таймере вы проверяете каждый элемент по отдельности и при необходимости делаете еще один запрос. Этот второй таймер закончится, когда он достигнет конца списка, и снова запустится в следующем часе, когда будет выполнен первый setInterval. Зачем мне вообще нужны 2 таймера? Проще говоря, мне нужен второй, чтобы не нарушать лимит запросов API.
Мой взгляд на это примерно такой:
setInterval(function ()
{
var counter = 0;
var returnCode;
var getUrl = "url";
returnCode = httpGet(getUrl);
var object = JSON.parse(returnCode);
function httpGet(url){
var response = requestSync(
'GET',
url, (err, res, body) => {
if (err)
{
return;
}
});
return response.body;
}
setInterval(function ()
{
//Do some more stuff with data here
if (!object || typeof object.data[counter] === 'undefined')
{
return; //this should end the second setInterval until the first one is activated again
}
counter++;
}, 1000);
}, 3600000);
Я знаю, что это работает не совсем так, потому что счетчик является локальной переменной, как и список, но я понятия не имею, как заставить его работать иначе. Есть идеи?





setInterval(function ()
{
var counter = 0;
var returnCode;
var getUrl = "url";
returnCode = httpGet(getUrl);
var object = JSON.parse(returnCode);
function httpGet(url){
var response = requestSync(
'GET',
url, (err, res, body) => {
if (err)
{
return;
}
});
return response.body;
}
let isFinished = true;
let ref = setInterval(function ()
{
// if the current iteration is taking longer than 1 second then just return;
if (!isFinished){
return;
}
isFinished = false
//Do some more stuff with data here and once it is done make isFinished = true
isFinished = true;
counter++;
if (!object || typeof object.data[counter] === 'undefined')
{
return clearTimeInterval(ref);
}
}, 1000);
}, 3600000);
Вы можете использовать clearInterval, чтобы остановить второй цикл.
/**
* Perform a GET request and returns JSON body
*/
function httpGet(url) {
const response = requestSync(
'GET',
url,
(err, res, body) => {
if (err) {
return;
}
});
return JSON.parse(response.body);
}
setInterval(function() {
let counter = 0;
// Execute one request
const returnCode = httpGet('url');
const descriptor = setInterval(function() {
//Do some more stuff with data here
if (!object || typeof object.data[counter] === 'undefined') {
// Stop the second setInterval
clearInterval(descriptor);
return;
}
counter += 1;
}, 1000);
}, 3600000);