Асинхронное скачивание файлов в node js

Поддержка
  • По форуму не нашел решения.

    Имеем

    • список ссылок (10 элементов)
    • асинхронную функцию в Node js, для скачивания файлов

    Promise.all - быстро завершает свою работу
    Этот же код функции в VS-Code - отрабатывает нормально, файлы скачиваются параллельно

    Как правильно синхронизировать код, для асинхронного скачивания файлов ?
    Поддерживается ли Promise.all встроенной nodejs ?

  • @inotoxic said in Асинхронное скачивание файлов в node js:

    По форуму не нашел решения.

    Имеем

    • список ссылок (10 элементов)
    • асинхронную функцию в Node js, для скачивания файлов

    Promise.all - быстро завершает свою работу
    Этот же код функции в VS-Code - отрабатывает нормально, файлы скачиваются параллельно

    Как правильно синхронизировать код, для асинхронного скачивания файлов ?
    Поддерживается ли Promise.all встроенной nodejs ?

    const fs = require('fs');
    const axios = require('axios');
    
    const urls = [
        'https://community.bablosoft.com/assets/uploads/files/1677659555720-1.txt',
        'https://community.bablosoft.com/assets/uploads/files/1677659555723-2.txt',
        'https://community.bablosoft.com/assets/uploads/files/1677659555724-3.txt'
    ];
    
    const downloadPromises = urls.map(url => axios.get(url, { responseType: 'arraybuffer' }));
    
    await(new Promise((resolve, reject) => {
        Promise.all(downloadPromises)
            .then(responses => {
                responses.forEach(response => {
                    const fileName = response.request.path.split('/').pop();
                    fs.writeFileSync(fileName, response.data);
                    console.log(`${fileName} Скачен!`);
                });
                console.log('Все файлы скачены');
                resolve();
            })
            .catch(err => console.log(err));
    }));
    
  • @Fox said in Асинхронное скачивание файлов в node js:

    Promise.all

    Promise.all и так возвращает промис, можно просто await Promise.all ...

  • @Fox Спасибо, все тоже самое делал, но что-то видимо не так...