nodejs应用程序的任务无限执行

时间:2013-04-08 18:16:44

标签: javascript node.js io

假设我有代码,就像这样

function execute() {
    var tasks = buildListOfTasks();
    // ...
}

buildListOfTask创建了一系列函数。函数是异步的,可能会发出HTTP请求或/和执行数据库操作。

如果任务列表显示为空或执行了所有任务,我需要再次重复相同的execute例程。再说一遍,说“无限循环”。所以,它就像申请一样守护着。

我完全理解如何在同步世界中实现这一点,但有点混淆如何在node.js async-world中实现它。

3 个答案:

答案 0 :(得分:6)

使用async.js及其队列对象。

function runTask(task, callback) {
    //dispatch a single asynchronous task to do some real work
    task(callback);
}
//the 10 means allow up to 10 in parallel, then start queueing
var queue = async.queue(runTask, 10);

//Check for work to do and enqueue it
function refillQueue() {
  buildListOfTasks().forEach(function (task) {
    queue.push(task);
  });
}    

//queue will call this whenever all pending work is completed
//so wait 100ms and check again for more arriving work
queue.drain = function() {
  setTimeout(refillQueue, 100);
};

//start things off initially
refillQueue();

答案 1 :(得分:1)

如果您已熟悉async等库,则可以使用execute()作为最终回调来重启任务:

function execute(err) {
    if (!err) {
        async.series(buildListOfTasks(), execute);
    } else {
        // ...
    }
}

答案 2 :(得分:0)

我认为你必须使用async.js,可能是并行函数。 https://github.com/caolan/async#parallel

在全局回调中,只需调用execute来进行递归调用。

async.parallel(tasks,
    function(err, results){
        if(!err) execute();
    }
);