Я изучаю 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.