Расписание заданий в очередь при запуске электрона - PullRequest
2 голосов
/ 03 мая 2019

Я использую "electron": "^5.0.0" и "node-schedule": "^1.3.2" - node-schedule .Я пытаюсь загрузить свою очередь на работу при запуске приложения для электронов.

Мой main.js от электрона выглядит следующим образом:

async function main() {

  const {
    app,
    BrowserWindow
  } = require('electron')
  const schedule = require('node-schedule');
  const {
    Schedule
  } = require('./schedule')

  let win

  let sch = new Schedule()
  try {
    await sch.initScheduledContent()
    console.log("Imported of jobs done!");
  } catch (error) {
    console.log(error);
  }

  function createWindow() {
    win = new BrowserWindow({
      width: 800,
      height: 600
    })
    win.loadFile('index.html')
    win.on('closed', () => {
      win = null
    })
  }

  app.on('ready', createWindow)

  app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') {
      app.quit()
    }
  })

  app.on('activate', () => {
    if (win === null) {
      createWindow()
    }
  })
}

main()

Мой schedule.js выглядит следующим образом:

const schedule = require('node-schedule');

class Scheduler {

    constructor(){}

    randomDate(start, end) {
        return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime()));
    }

    async initScheduledContent() {
        let start = new Date()
        let end = new Date()
        end.setSeconds(end.getSeconds() + 20) // add 20 seconds to current time

        let arr = []
        const numb_jobs = 50
        for (let i = 0; i < numb_jobs; i++) {
            d = randomDate(start, end)
            arr.push([i, d]) // job_number, date
            console.log('OPEN: Job  -- #' + arr[i][0] + ' -- scheduled at: ' + arr[i][1]);

            schedule.scheduleJob(arr[i][1], function () {
                console.log('DONE: Job -- #' + arr[i][0] + ' -- executed at: ' + arr[i][1]);
            });
        }
        console.log("\n Number of Jobs Scheduled: " + Object.keys(this.getQueue()).length + "\n");
    }
}

module.exports = {
    Scheduler
};

При использовании electron . мое приложение не запускается и зависает.

Любые предложения, как запустить мое приложение и загрузить все задания в очередь?

1 Ответ

3 голосов
/ 03 мая 2019

не блокируйте основной процесс с помощью await ..

, вместо этого вызывайте его внутри app.on('ready', async () => {/* so your schedule process then call createWindow */}

и не пишите все внутри функции ..

как сейчасВы можете назначить асинхронную функцию on.ready ..

альтернативное решение

сделать что-то подобное

создать mainWindow, затем вызвать ваш планировщик через main черезipcRenderer ..

это должно работать ..

если окно не создано, то это должно быть где-то ваша ошибка ..

пример кода для ipcRendrer

// main.js

const {ipcMain} = require('electron')

/* start app, createWindow and all other code */

ipcMain.on('scheduler', (event, dataPassedFromRenderer) => {
  /* do your schedule work */

  // pass any data asynchronously to renderer process with
  event.sender.send('scheduler', returnData) 
}

теперь в коде рендерера

/* renderer.js in html or required file in html */

const {ipcRenderer} = require('electron')

// this will send event in main.js
ipcRederer.send('scheduler', 'send any type of data, can be left blank')

// this will listen for any response or event from main.js
ipcRederer.on('scheduler', (event, data) => {/* do if required */})



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