Есть простая функция, которая получает текст и имя файла под которым нужно сохранить этот текст и соответственно через Blob делает ссылку, кликает по ней, загружает файл и удаляет эту сылку
function sleep(milliseconds) {
const date = Date.now();
let currentDate = null;
do {
currentDate = Date.now();
} while (currentDate - date < milliseconds);
}
function save(text, filename){
var blob = new Blob([text], {type: "octet/stream"});
link.href = URL.createObjectURL(blob);
link.download = filename;
link.click();
sleep(100);
URL.revokeObjectURL(link.href);
}
Один файл этот код скачивает замечательно, но когда в эту функцию залетает одновременно сто задач, то примерно 10% файлов не сохраняется. Посмотрел, что люди просто вставляют паузу 500 внутрь функции и тогда все идет медленно, но верно. Стал экспериментировать с задержкой и при sleep(100) он довольно лихо скачивает маленькие файлы, но если попадается большой, то задержки не хватает и он может его пропустить.
Как можно избежать этого "костыля" с задержкой и начинать скачивать следующий файл, если предыдущий уже скачался? Никакого промежуточного массива ссылок для скачивания нет. Задания в функцию летят "неупорядоченной толпой"
Сейчас эта функция висит
здесь на кнопках нарезки товаров и разделов. Соответственно разделы иногда пропускаются, так как их размер больше.