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

假设我有这样的代码

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

buildListOfTask创build函数的数组。 函数是asynchronous的,可能会发出HTTP请求或/和执行数据库操作。

如果任务列表显示为空或者所有任务都被执行,我需要重复execute相同的例程。 再说一遍,说“无限循环”。 所以,这是应用程序的守护进程。

我完全可以理解如何在同步世界中完成这个任务,但是如何在node.jsasynchronous世界中实现这一目标却有点困惑。

使用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(); 

如果您已经熟悉像async这样的库,可以使用execute()作为最后的callback来重新启动任务:

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

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

在全局callback中,只需调用execute来进行recursion调用即可。

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