Electron-dl использует promise для всех одновременных загрузок - PullRequest
0 голосов
/ 05 июля 2018

Я использую Electron-dl Согласно документации Функция загрузки download(window,URL,Options) принимает только URL и возвращает обещание

Цель:

  1. Я хочу скачать массив файлов одновременно
  2. in then () Я хочу получить пути dl.getSavePath () для данного массива
  3. in catch() Я хочу получить ошибки для ошибочных элементов для данного массива
  4. Могу ли я пообещать. Все сделаем эту работу? Любая другая альтернатива?

Что не так с кодом: then() вызывается немедленно вместо ожидания завершения всех загрузок

Zip-файл:

electron-dl-multi.zip
использовать npm install && npm start

Big_array_test:

  var files = [
    'https://download.filezilla-project.org/client/FileZilla_3.34.0_win64-setup_bundled.exe',
    'http://the.earth.li/~sgtatham/putty/latest/w32/putty-0.70-installer.msi',
    'http://speedtest.ftp.otenet.gr/files/test10Mb.db'
  ]

Код:

var files= [
'http://speedtest.ftp.otenet.gr/files/test100k.db', 
'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_120x44dp.png'];
      var promises = [];
      var _browserWindow = BrowserWindow.getFocusedWindow();
      //
      for (var i = 0; i < files.length; i++) {
        promises.push(download(_browserWindow, files[i], {
          directory: os.tmpdir() // Default is User's downloads directory
        }).then(function (dl) {
          return dl.getSavePath();
        }).catch(function (err) {
          return err;
        }));            
      }
      Promise.all(promises)
        .then(function (_files) {
          console.log(_files);
        }).catch(function (err) {
          console.log( err);
        });

1 Ответ

0 голосов
/ 05 июля 2018

Я думаю, что ваш код в порядке - за исключением того, что сказано в комментариях, возможно, вы не должны ловить ошибку в promises.push, а просто сделать это в Promise.all.

Я запустил приложение из вашего zip-файла, оно сработало и правильно загрузило 2 файла.

Но затем я попытался изменить какой-то URL-адрес и поставить тот, который не существует: вот проблема В этом случае функция download не разрешает обещание (что является нормальным) и не отклоняет его (что следует).

Попробуйте сами запустить этот простой код:

download(mainWindow, 'https://nothing.wrong-url.org', {
  directory: os.tmpdir() // Default is User's downloads directory
}).then(function (dl) {
  console.log(dl.getSavePath());
}).catch(console.error)

Обещание просто висит здесь и не разрешает и не отвергает. Вы можете открыть вопрос об электронном DL Github.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...