*edit:我在Celery任务中发现了一个错误,导致了这个问题。因此,这与那段JavaScript代码的漏洞无关。建议结束此问题。
我在Flask web服务器上运行了这个Javascript函数,它检查Celery任务的状态。如果任务完成,请console.log其结果,否则在2秒钟后重新检查。
如果Celery任务在6分钟内完成,它运行良好。然而,当它达到6分钟大关时,该功能就会停止运行。Celery任务的状态再也没有更新,尽管我确信该任务仍在后台运行,但我没有从Javascript收到任何结果。
这是Flask的超时设置吗?任何见解都将不胜感激。
function update_progress(status_url) {
// send GET request to status URL
$.getJSON(status_url, function(data) {
if (data['state'] != 'PROGRESS') {
if ('result' in data) {
console.log(data['result']);
}
else {
// something unexpected happened
console.log(data['state']);
}
}
else {
// rerun in 2 seconds
setTimeout(function() {
update_progress(status_url);
}, 2000);
}
});
}
您可以尝试使用setInterval
,将其注册到变量中。
const updateInterval = setInterval(function(){
update_progress(status_url);
},2000);
在update_progress
函数内部,删除else
部分并添加clearInterval(updateInterval)
:
function update_progress(status_url) {
// send GET request to status URL
$.getJSON(status_url, function(data) {
if (data['state'] == 'PROGRESS') {
return;
}
clearInterval(updateInterval);
if ('result' in data) {
console.log(data['result']);
}
else {
// something unexpected happened
console.log(data['state']);
}
});
}