Как сделать результаты доступными из вызова ipc вне функции? - PullRequest
1 голос
/ 25 апреля 2019

У меня есть две функции.Тот, который делает вызов ipcmain, и тот, который является родительским для этой функции.Вызов ipcmain получает некоторые данные из базы данных и возвращает их.Идея состоит в том, чтобы эти вызовы были организованы внутри службы.

Моя проблема в том, что что-то не правильно запускается, и я не уверен, где моя проблема.

Если я утешаю результат регистрации, онправильно регистрирует, однако, сначала регистрирует журнал от родительских вызовов и регистрирует объект EventEmitter.

Как я могу заставить их запускаться по порядку, и результаты вызова ipcmain доступны вне этой функции?

Я уже пытался присвоить результаты переменной в верхней части функции, а затем вернуть, что после вызова результаты точно такие же.

Я также пытался преобразовать обе функции в асинхронныежду безрезультатно.

Я догадываюсь, что функция "backend" ipcmain.on () не отправляет обещание и, следовательно, родительский журнал происходит до того, как значение будет установлено.

// Parent Function
async getDbs (event){
  var databaseName = event.target.parentNode.innerText;
  this.selectedServer = this.LocalStorage.getItem(databaseName);
  this.databaseArray = await this.BackendService.getDbs(this.selectedServer)
  console.log(await this.databaseArray)
}
// Call to IPC Main
getDbs(config) {
  window.ipc.send('auth-getdbs', config);
  return window.ipc.on('auth-getdbs-reply', async (event, result) => {
    // Correctly logs an array of databases
    console.log(result);
    // returns the EventEmitter object
    return result;
  });
}
// IPC Main Function
ipcMain.on('auth-getdbs', async (event, arg) => {
  var results = await handlers.getDbs(event, arg, scope);
  event.sender.send('auth-getdbs-reply', results);
})

Ожидаемые результаты: оба журнала консоли выводят массив имен баз данных

Фактические результаты: журналы консоли родительской функцииEventEmitter и консольный журнал из вызова ipcmain регистрируют массив баз данных.

1 Ответ

0 голосов
/ 25 апреля 2019

Я думаю, что проблема у вас в том, что, по вашему мнению, возвращает метод. В вашей функции getDbs я действительно не уверен, что метод window.ipc.on возвращает то, что возвращается обратным вызовом; он возвращает EventEmitter, созданный методом.

Поскольку кажется, что вы работаете с асинхронным обратным вызовом, я бы сделал что-то вроде этого.

// Call to IPC Main
getDbs(config) {
  window.ipc.send('auth-getdbs', config);
  return new Promise((resolve, reject) => {
    window.ipc.on('auth-getdbs-reply', (event, result) => {
      resolve(result);
    });
  });
}

Функция будет возвращать Promise, который разрешает результат, который вы ожидаете получить. То, как вы вызываете эту функцию, поскольку вы используете ключевое слово await, должно остаться прежним.

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