Node.js: синхронная очередь загрузки файлов
Использование асинхронных очередей позволило мне добавить задачи загрузки в очередь с заданным параллелизмом.
Текущая проблема: задачи запускают асинхронную загрузку файлов, поэтому задача "запускается" после начала загрузки, а не после ее завершения. Это нарушает механизм параллелизма.
Теперь я хотел бы создать задачу загрузки (запись содержимого за URL в заданный локальный путь к файлу), которая работает полностью синхронно, чтобы запросы в задачах, добавленных в очередь, не превышали заданный параллелизм.
Любая библиотека и подход приветствуются. Код должен фокусироваться только на загрузке файла с данного URL по указанному пути - без создания пути, обработки ошибок и т. Д.
1 ответ
Если вы хотите повторно использовать своих асинхронных рабочих, вы можете попробовать этот подход. В асинхронной очереди есть работники, меньшие или равные параллелизму, и очередь ожидания с вспомогательными событиями / функциями. Так:
- Не добавляйте все URL / задачи в вашу асинхронную очередь. Поддерживать отдельную очередь для них.
- При запуске всплывающих задач, равных параллельности, вы хотите добавить их в асинхронную очередь с помощью метода push асинхронной очереди. Также запустите функции для их запуска триггера.
- Ваша асинхронная очередь теперь работает с максимальным параллелизмом. Отправьте дополнительное задание, которое попадет в очередь ожидания.
- Дождитесь события emtpy и запустите добавленный триггер запуска дополнительных задач, используя обработчик событий. Также извлеките еще одну задачу из своей очереди и добавьте ее в асинхронную очередь.