Какие два аргумента принимает async.queue?
async.queue
— это функция из библиотеки async
, предназначенная для управления очередями асинхронных задач. Она позволяет выполнять несколько асинхронных функций последовательно или параллельно.
async.queue
принимает два основных аргумента:
- Функция обработки задачи (worker): Эта функция будет вызвана для обработки каждой задачи в очереди. Функция должна принимать два аргумента: задачу и обратный вызов (callback). После завершения работы задачи обратный вызов должен быть вызван с null (если нет ошибки) или с ошибкой (если работа завершилась с ошибкой).
- Число параллельных задач (concurrency): Это число определяет, сколько задач могут выполняться одновременно. Если у вас есть много задач, и вы хотите увеличить производительность, вы можете установить это значение на большее количество, чем 1.
Пример использования async.queue
Ниже представлен простой пример, который демонстрирует использование async.queue
.
const async = require('async');
// Создаем очередь с максимальным количеством параллельных задач
const queue = async.queue((task, callback) => {
console.log(`Обработка задачи: ${task.name}`);
// Имитация асинхронной работы с таймером
setTimeout(() => {
console.log(`Задача завершена: ${task.name}`);
callback(); // Вызов обратного вызова
}, task.delay);
}, 2); // Макс. 2 задачи одновременно
// Добавляем задачи в очередь
queue.push({ name: 'Задача 1', delay: 1000 });
queue.push({ name: 'Задача 2', delay: 500 });
queue.push({ name: 'Задача 3', delay: 3000 });
queue.push({ name: 'Задача 4', delay: 100 });
// Обрабатываем завершение всех задач
queue.drain(() => {
console.log('Все задачи обработаны!');
});
Объяснение примера:
- Мы создаем очередь с максимальным количеством параллельных задач, равным 2.
- В функции обработки задачи мы используем
setTimeout
для имитации асинхронной работы. - Задачи добавляются в очередь с помощью
queue.push()
. - Когда все задачи завершены, вызывается метод
queue.drain()
, который уведомляет нас о том, что очередь пустая.
Таким образом, async.queue
является мощным инструментом для управления асинхронными задачами, который помогает упорядочить выполнение функций и улучшить производительность вашего кода.