var processStatusCheck = setInterval(function statusCheck() {
sequelize.query(dbQuery).then(function (data) {
winston.info(' Status:', importStatus);
if (importStatus === true) {
winston.info('Inside', pollCount);
clearInterval(processStatusCheck);
addProcess(Id, function (response) {
res.send(200)
});
} else {
if(pollCount > 15){
winston.info('It came here !!!', pollCount);
res.sendStatus(500);
}else{
winston.info('Incrementing.....');
pollCount++;
setTimeout(statusCheck, 18000);
}
}
});
}, 5000);
我正在尝试实现异步Javascript函数。我想不断查询数据库直到状态变为真,
最初,按照setInterval在5秒钟后进行调用,但是一旦达到setTimeout,它将连续调用该函数。我希望在18秒后调用它。如果在setTimmeout中时间少于5秒,则立即发送响应,并且出现“无法在发送标头后设置标头”错误。
具有setInterval和setTimeout是否在这里引起我问题?请指导我。
仍然没有遵循期望的逻辑,因为您还没有真正解释您期望它如何工作。我将描述您在做什么,并指出该流程中的一些缺陷。
importStatus
变为true
,但此循环中的任何内容都没有设置importStatus
,因此似乎永远无法满足。 setTimeout()
。 setTimeout()
都在运行。 res.sendStatus(500)
,但从不停止setInterval()
,它会一直运行并在每次触发时都尝试执行res.sendStatus(500)
。问题摘要:
importStatus
进行任何操作,因此基于此代码永远不会是true
。我假设您的真实代码必须不同于此处显示的代码。importStatus
从不为true
(请参见上一点),则您永远不会停止间隔-它会永远运行。您可能需要在几个地方停止间隔计时器。当然,在执行res.sendStatus(500)
时将其停止,并且可能在开始执行setTimeout()
时也将其停止。setTimeout()
设置18秒钟。因此,现在间隔和setTimeout()
都在运行。您似乎不太希望那样。开始执行setInterval()
]时,也许应该停止setTimeout()
addProcess()
显示了异步样式的回调接口,但是没有机会进行错误处理。它真的是一个没有错误的函数吗?data
,这是数据库查询结果,因此从不使用该查询。