Вызов процесса рендеринга из действия React-Redux (Электрон)

У меня есть электронное приложение, которое использует React и Redux, поэтому у меня есть создатели действий, редукторы и т. д.

У меня также есть функция в моем файле рендерера (nodejs), которая делает некоторые асинхронные вещи.

Я хочу вызвать эту функцию из своего создателя действий. Я предполагаю, что мне придется использовать redux-thunk для этой или какой-либо другой асинхронной библиотеки, однако я не совсем уверен, как получить доступ к этой функции в процессе рендеринга и использовать ее в моем приложении react.redux?

Так, например. для создателя действия:

export const downloadFromYoutube = (download) => {
//I want to call the function here
};

и мой файл рендерера содержит только одну функцию, которая делает асинхронные вещи:

var YoutubeMp3Downloader = require('youtube-mp3-downloader');

function downloadFromYoutube() {
  console.log("Hello");
  //Configure YoutubeMp3Downloader with y our settings
  var YD = new YoutubeMp3Downloader({
      "ffmpegPath": "/usr/local/Cellar/ffmpeg/3.2.2/bin/ffmpeg",        // Where is the FFmpeg binary located?
      "outputPath": "/Users/dominik/Coding/youtube-downloader-papa/downloads/",    // Where should the downloaded and encoded files be stored?
      "youtubeVideoQuality": "highest",       // What video quality should be used?
      "queueParallelism": 2,                  // How many parallel downloads/encodes should be started?
      "progressTimeout": 2000                 // How long should be the interval of the progress reports
  });
  console.log("Downloading");
  //Download video and save as MP3 file
  YD.download("jhjPSj-qnyg");


  YD.on("finished", function(data) {
      console.log(data);
  });

  YD.on("error", function(error) {
      console.log(error);
  });

  YD.on("progress", function(progress) {
      console.log(progress);
  });
}


    }

person George Welder    schedule 01.03.2017    source источник
comment
Если у вас есть это в отдельном модуле, вы должны просто иметь возможность требовать его, когда вы определяете своего создателя действия. Если он использует встроенную функциональность, вам нужно потребовать следующее: var downloadFromYoutube = require('electron').remote.require('./downloadFromYoutube.js') при условии, что имя вашего модуля downloadFromYoutube.js.   -  person Nikolaj Dam Larsen    schedule 01.03.2017
comment
спасибо в первую очередь. Я изначально поместил его в файл рендерера, который предоставляет электрон. Однако теперь я создал файл, как вы предложили ('downloadFromYoutube.js‌​'), но я получаю Error: Cannot find module 'electron'   -  person George Welder    schedule 01.03.2017
comment
Во-первых, просто попробуйте импортировать его с помощью require('downloadFromYoutube.js‌') (т.е. без импорта электрона и использования удаленного доступа). Если он жалуется, то я считаю, что электрон расширяет объект window, поэтому, возможно, вы могли бы использовать const downloadFromYoutube = window.require('electron').remote.require('./downloadFromYoutube.js‌​';.   -  person Nikolaj Dam Larsen    schedule 01.03.2017
comment
благодарю вас. он не жалуется, когда я требую его напрямую, однако он также не работает. Когда я меняю имя файла на то, что не существует, оно также не жалуется.   -  person George Welder    schedule 01.03.2017
comment
Если я импортирую файл с require('../../test.js‌');, и этот файл содержит функцию, downloadSomething() должен ли я тогда просто сделать downloadSomething(); в моем файле, который импортирует эту функцию? я получаю Uncaught ReferenceError: downloadSomething is not defined   -  person George Welder    schedule 01.03.2017
comment
Когда вы используете require(), вы импортируете модуль — это не совсем то же самое, что просто импортировать файл, вы должны определить, из чего состоит этот модуль, то есть публичный интерфейс этого модуля. В этом случае вы можете просто добавить exports.module = downloadFromYoutube в конец файла downloadFromYoutube.js, и ошибка ссылки должна исчезнуть. Я рекомендую вам прочитать о том, как модули работают в JavaScript, так как он вездесущ.   -  person Nikolaj Dam Larsen    schedule 01.03.2017