我有两个职能。一个调用ipcmain,另一个调用该函数。 ipcmain调用从数据库中获取一些数据并将其返回。想法是将这些呼叫组织在服务中。
我的问题是无法正确触发,我不确定我的问题在哪里。
如果我通过控制台记录结果,则它会正确记录日志,但是,来自父目录的日志会先调用并记录EventEmitter对象。
如何在功能外调用这些命令,并从ipcmain调用结果呢?
我已经尝试过将结果分配给函数顶部的变量,然后在调用后返回该变量,但是结果完全相同。
我还尝试了将两个函数都转换为异步等待,但没有结果。
我的直觉是,“后端” 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调用的控制台日志记录数据库数组。
答案 0 :(得分:0)
我认为您遇到的问题是您认为该方法返回的结果。在您的函数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,该Promise可解决您期望返回的结果。由于您使用的是await
关键字,因此调用此函数的方式应保持不变。