说我有一个很长的任务,当一个人连接到InitializeDB
时,它会开始运行。 (当然在未来有授权,但现在就把它留下来了。)
'post /initializeDB':'OrderController.initializeAll',
现在的问题是:初始化函数永远不会运行两次。 - 理想情况下,我知道我设置了一个任务管理器,它只能在后台开始我可以轮询的任务
然而,为了目前的简单性(并且为了显示概念证明),帆可以通过"知道"另一个连接/路由已经在运行?因此,如果我连接两次到/initializeDB
,它不会尝试初始化数据库两次?
答案 0 :(得分:1)
您可以在控制器中使用变量 - 只需在进程运行时将其切换为true
,就像这样。所以,在OrderController.js中:
var initializeRunning = false;
module.exports = {
initializeAll: function(req, res) {
// return benign result if already running
if (initializeRunning) {
return res.send({alreadyRunning: true});
}
// start running
initializeRunning = true;
// using setTimeout as a stand-in for a long async process
setTimeout(function() {
// finished the process
res.send({complete: true});
// if you want to allow this method to run again later, unset your toggle
initializeRunning = false;
}, 3000);
},
};