Как я могу иметь рекурсивную асинхронную очередь? - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь понять асинхронную очередь из ссылка . Ниже приведен код из учебника, но немного изменен. Вместо интенсивной задачи я пытаюсь рекурсивно вызвать async.queue, но он останавливается только после 5 задач. Разве эта программа не должна работать бесконечно? Также tasksQueue.drain никогда не вызывается. Чего мне не хватает?

Также я упомянул проблему на github , в которой говорится, что нужно отправить ее в очередь, а затем вызвать обратный вызов, который я выполнил.

var async = require('async');
var _ = require('lodash');

//Generate an array of 10 random tasks;
var tasksList = _.times(10, _.uniqueId.bind(null, 'task_'));

var tasksQueue = async.queue(function (task, callback) {
    console.log('Performing task: ' + task.name);
    console.log('Waiting to be processed: ', tasksQueue.length());
    console.log('----------------------------------');

    //Simulate intensive processing

        tasksList.push(_.times(10, _.uniqueId.bind(null, 'task_')) );
        // If you want to pass an error object here, it will be caught in the task handler
        // callback('something went wrong');
        _.each(tasksList, function (task) {
            tasksQueue.push({ name: task }, function (err) {
                //Done
                if (err) {
                    console.log(err);
                }
                callback();
            });
        });
}, 5);

// When all is processed, drain is called
tasksQueue.drain = function() {
    console.log('all items have been processed.');
};

_.each(tasksList, function(task) {
    tasksQueue.push({name: task}, function(err) {
        //Done
        if (err) {
            console.log(err);
        }

    });
});
...