Warum werden Dateien nacheinander heruntergeladen, anstatt gleichzeitig Promise.all() in Electron (Node.js) zu verwendenJavaScript

Javascript-Forum
Guest
 Warum werden Dateien nacheinander heruntergeladen, anstatt gleichzeitig Promise.all() in Electron (Node.js) zu verwenden

Post by Guest »

Ich arbeite an einer Electron-App und versuche, mit fs.promises.writeFile() in einer asynchronen Funktion mehrere Dateien gleichzeitig aus einer Ordnerstruktur herunterzuladen, aber die Dateien werden nacheinander und nicht gleichzeitig heruntergeladen obwohl ich Promise.all() verwende. Hier ist meine Implementierung:

Code: Select all

const fs = require('fs');
const path = require('path');

async function downloadFolder(folderName, folderStructure, destinationPath) {
const folderPath = path.join(destinationPath, folderName);

if (!fs.existsSync(folderPath)) {
try {
fs.mkdirSync(folderPath, { recursive: true });
} catch (err) {
throw new Error(`Failed to create folder at ${folderPath}: ${err.message}`);
}
}

try {
const downloadPromises = folderStructure.map((item) => {
const itemPath = path.join(folderPath, item.name);

console.log(`Starting download for: ${itemPath}`);

if (item.type === 'file') {
return fs.promises.writeFile(itemPath, item.content)
.then(() => console.log(`Downloaded: ${itemPath}`))
.catch((err) => {
throw new Error(`Failed to write file at ${itemPath}: ${err.message}`);
});
} else if (item.type === 'folder') {
return downloadFolder(item.name, item.children, folderPath); // Recurse for subfolder
}
});

// Wait for all download promises to resolve concurrently
await Promise.all(downloadPromises);
console.log(`All items in ${folderName} downloaded successfully!`);
} catch (err) {
throw new Error(`Error processing folder ${folderName}: ${err.message}`);
}
}
Beim Testen mit einem Ordner, der nur Dateien enthält (keine verschachtelten Ordner) oder mit Ordnern mit verschachtelten Ordnern, erfolgen die Downloads jedoch sequentiell, einer nach dem anderen. Hier ist ein Beispiel für die Ordnerstruktur, mit der ich teste:

Code: Select all

folderStructure = [
{ name: '100-mb-example-jpg.jpg', type: 'file', content: /* file data */ },
{ name: '50mb.jpg', type: 'file', content: /* file data */ },
{ name: '70mb.iso', type: 'file', content: /* file data */ }
];
Ich erwarte, dass die Dateien gleichzeitig heruntergeladen werden, aber sie scheinen im Netzwerk nacheinander heruntergeladen zu werden. Wie kann ich das beheben, um die Dateien parallel herunterzuladen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post