假设我有代码,就像这样
function execute() {
var tasks = buildListOfTasks();
// ...
}
buildListOfTask
创建了一系列函数。函数是异步的,可能会发出HTTP请求或/和执行数据库操作。
如果任务列表显示为空或执行了所有任务,我需要再次重复相同的execute
例程。再说一遍,说“无限循环”。所以,它就像申请一样守护着。
我完全理解如何在同步世界中实现这一点,但有点混淆如何在node.js async-world中实现它。
答案 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();
}
);