feat: implémenter processBatch et downloadAllAsZip
This commit is contained in:
+15
-1
@@ -1,3 +1,17 @@
|
|||||||
|
/**
|
||||||
|
* Traite un tableau d'items avec au plus `concurrency` appels simultanés.
|
||||||
|
* @param {any[]} items
|
||||||
|
* @param {(item: any) => Promise<void>} processFn
|
||||||
|
* @param {number} concurrency
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
export async function processBatch(items, processFn, concurrency = 3) {
|
export async function processBatch(items, processFn, concurrency = 3) {
|
||||||
throw new Error('Not implemented');
|
const queue = [...items];
|
||||||
|
const workers = Array.from({ length: concurrency }, async () => {
|
||||||
|
while (queue.length > 0) {
|
||||||
|
const item = queue.shift();
|
||||||
|
if (item !== undefined) await processFn(item);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
await Promise.all(workers);
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-1
@@ -1,3 +1,22 @@
|
|||||||
|
/**
|
||||||
|
* Compresse les fichiers en ZIP et déclenche le téléchargement.
|
||||||
|
* @param {{ name: string, blob: Blob }[]} processedFiles
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
export async function downloadAllAsZip(processedFiles) {
|
export async function downloadAllAsZip(processedFiles) {
|
||||||
throw new Error('Not implemented');
|
const zip = new JSZip();
|
||||||
|
for (const { name, blob } of processedFiles) {
|
||||||
|
zip.file(name, blob);
|
||||||
|
}
|
||||||
|
const zipBlob = await zip.generateAsync({ type: 'blob' });
|
||||||
|
const url = URL.createObjectURL(zipBlob);
|
||||||
|
|
||||||
|
const a = document.createElement('a');
|
||||||
|
a.href = url;
|
||||||
|
a.download = `photos-produits-${new Date().toISOString().slice(0, 10)}.zip`;
|
||||||
|
document.body.appendChild(a);
|
||||||
|
a.click();
|
||||||
|
document.body.removeChild(a);
|
||||||
|
|
||||||
|
setTimeout(() => URL.revokeObjectURL(url), 10_000);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user