Node.js - async.queue() - 如何结束任务以允许更多运行?

Node.js - async.queue() - How to end a task to allow more to run?

我正在使用 async 的队列方法对任务进行排队。我将并发设置为 20。我有 2100 多个任务要完成,但是当队列达到 20 时,它会停止处理更多任务。这是我拥有的:

syncrequest = require('sync-request');

o.getObj = function(site, link){
    global.task.comment(site, 'Pulling page ' + link, function(){});
    try{
        q.push({url: link}, function(){
            console.log("processed" + link);
        });
    }catch(e){
        console.log(e);
    }
}

var q = async.queue(function(task, callback){
        var body = syncrequest('GET', base+'/'+task.url).getBody();
        $$$ = cheerio.load(body);
        var obj = {
            title: $$$('#title').text(),
            link: task.url,
        };
        $$$ = null;
        objs.push(obj);
        return;
},20);

回调 console.log("processed" + link); 永远不会被调用,所以我假设它认为任务仍然是 运行。我正在记录总对象数和推送到 setInterval 上的对象数,它记录:

app-0 (out): 2210 ... 3
app-0 (out): 2210 ... 6
app-0 (out): 2210 ... 9
app-0 (out): 2210 ... 12
app-0 (out): 2210 ... 15
app-0 (out): 2210 ... 18
app-0 (out): 2210 ... 20
app-0 (out): 2210 ... 20
app-0 (out): 2210 ... 20
app-0 (out): 2210 ... 20
...

我应该做些什么来正式完成一项任务,为另一个任务腾出空间吗?

您需要调用回调函数()

var q = async.queue(function(task, callback){
        var body = syncrequest('GET', base+'/'+task.url).getBody();
        $$$ = cheerio.load(body);
        var obj = {
            title: $$$('#title').text(),
            link: task.url,
        };
        $$$ = null;
        objs.push(obj);
        return callback();
},20);