node.js - SetInterval 嵌套在另一个 setInterval
问题描述
所以我正在尝试编写一个每 1 小时执行一次的计时器。第一个setInterval
应该从 Web 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);
我知道它不像那样工作,因为计数器是一个局部变量,列表也是如此,但我不知道如何让它工作。有任何想法吗?
解决方案
您可以使用 aclearInterval
停止第二个循环。
/**
* 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);
推荐阅读
- php - 将文件上传到 Cerb API 上的任务
- javascript - 使用 codeigniter MVC 插入到 db mysql 后立即显示数据
- sql - 如何使用 LIKE 进行偏好查询?
- jenkins - 如何在 Jenkins Pipeline 中使用注入环境变量(属性文件路径)
- android - 无法在可绘制对象中使用主题属性。得到 android.content.res.Resources$NotFoundException 错误
- javascript - 如何隐藏/禁用复制 youtube 视频链接的选项?
- python - 在 Windows 中将包手动添加到 PyCharm
- c++ - 是否需要双指针?
- r - R Shiny中的TextOutput和VerbatimTextOutput有什么区别
- c++ - QXmlStreamReader 获取标签值