Отправка ответа на ipcRenderer из ipcMain после завершения асинхронной операции - PullRequest
1 голос
/ 14 июня 2019

Я изучаю Electron, написав приложение, которое должно анализировать и анализировать файлы .csv. В качестве внешнего интерфейса я использую Vue.js. Начальная функциональность должна быть следующей: пользователь выбирает файл, основной процесс анализирует его, сводка файла отображается на клиенте как часть компонента Vue. Код ниже:

//background.js
import Analyzer from './Analyzer'
analyzer = new Analyzer();

ipcMain.on('data:upload', (event, data) => {
    let options = {
      filters: [{ 
        extensions: ['csv']
      }] 
    };
    let filepath = dialog.showOpenDialog(options);
    analyzer.loadDataCSV(filepath);  //executes async code
    event.sender.send('data:upload', analyzer.getState());// doesn't wait
})                                                        // async code to be completed 
                                                          // so the 'state' I'm sending 
                                                          // is actually incorrect


//Analyzer.js - class that i've wrote
import csv from 'fast-csv'
...
loadDataCSV(filepath) {
    if (!filepath) return;
    this.dataWSFilepath = filepath;
    this.showDataCard = true;
    let rowsCount = 0;
    csv. //async part
        fromPath(filepath, { delimiter: "|" })
        .on("data", function (data) {
            if (data[9] == 'NCR') rowsCount++;
        })
        .on("end", function () {
            this.NCRCount = rowsCount //Variable I'm expecting to be 
                                      //changed inside the Vue component
        });
}
getState(){ return { NCRCount: this.NCRCount }}
...

Скажите, пожалуйста, правильный способ дождаться завершения асинхронной части loadDataCSV () перед отправкой ответа в ipcRenderer.

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