Почему файлы загружаются последовательно, а не одновременно с использованием Promise.all() в Electron (Node.js)Javascript

Форум по Javascript
Ответить
Anonymous
 Почему файлы загружаются последовательно, а не одновременно с использованием Promise.all() в Electron (Node.js)

Сообщение Anonymous »

Я работаю над приложением Electron и пытаюсь загрузить несколько файлов одновременно из структуры папок с помощью fs.promises.writeFile() внутри асинхронной функции, но файлы загружаются последовательно, а не одновременно, даже хотя я использую Promise.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}`);
}
}
Однако при тестировании с папкой, содержащей только файлы (без вложенных папок), или с папками, имеющими вложенные папки, загрузки происходят последовательно, одна за другой. Вот пример структуры папок, которую я тестирую:

Код: Выделить всё

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 */ }
];
Я ожидаю, что файлы будут загружаться одновременно, но в сети они загружаются последовательно. Как я могу это исправить, чтобы файлы загружались параллельно?

Подробнее здесь: https://stackoverflow.com/questions/793 ... romise-all
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»