Я пытаюсь понять асинхронную очередь из ссылка . Ниже приведен код из учебника, но немного изменен. Вместо интенсивной задачи я пытаюсь рекурсивно вызвать 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);
}
});
});