如果进程已在运行,则SailsJS测试

时间:2017-12-12 12:22:27

标签: javascript sails.js

说我有一个很长的任务,当一个人连接到InitializeDB时,它会开始运行。 (当然在未来有授权,但现在就把它留下来了。)

'post /initializeDB':'OrderController.initializeAll',

现在的问题是:初始化函数永远不会运行两次。 - 理想情况下,我知道我设置了一个任务管理器,它只能在后台开始我可以轮询的任务 然而,为了目前的简单性(并且为了显示概念证明),帆可以通过"知道"另一个连接/路由已经在运行?因此,如果我连接两次到/initializeDB,它不会尝试初始化数据库两次?

1 个答案:

答案 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);
    },
};