So I'm trying to program a timer that would execute every 1 hour. The first setInterval
should grab a list of items from a web API, then the next timer would execute every second and in that timer you inspect every item individually and make another query if needed. That second timer would end when it reaches the end of the list and it would start again next hour when the first setInterval
is being executed. Why do I need 2 timers in the first place? Well simply put I need the second one not to break the API query limit.
My take on this is something like this:
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);
I know that it doesn't work quite like that because the counter is a local variable and so is the list but I have no idea how to make it work otherwise. Any ideas?
You can use a clearInterval
to stop your second loop.
/**
* 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);