Javascript 如何使ipc调用的结果在函数外部可用?
我有两个功能。一个调用ipcmain的函数,另一个是该函数的父函数。ipcmain调用从数据库获取一些数据并返回它。我们的想法是在一个服务中组织这些呼叫 我的问题是有些东西发射不正确,我不确定我的问题在哪里 如果控制台记录结果,它将正确记录,但是,来自父级的日志将首先调用并记录EventEmitter对象 我如何才能使这些命令按顺序启动,以及在该函数之外调用ipcmain Available的结果 我已经尝试过将结果赋给函数顶部的一个变量,然后在调用后返回该变量,但是,结果完全相同 我还尝试将这两个函数转换为async await,但没有结果 我的直觉是,“backend”ipcmain.on()函数没有发送承诺,因此父日志是在设置值之前发生的Javascript 如何使ipc调用的结果在函数外部可用?,javascript,electron,Javascript,Electron,我有两个功能。一个调用ipcmain的函数,另一个是该函数的父函数。ipcmain调用从数据库获取一些数据并返回它。我们的想法是在一个服务中组织这些呼叫 我的问题是有些东西发射不正确,我不确定我的问题在哪里 如果控制台记录结果,它将正确记录,但是,来自父级的日志将首先调用并记录EventEmitter对象 我如何才能使这些命令按顺序启动,以及在该函数之外调用ipcmain Available的结果 我已经尝试过将结果赋给函数顶部的一个变量,然后在调用后返回该变量,但是,结果完全相同 我还尝试将这
// 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)
}
预期成果:
两个控制台日志都输出数据库名称数组
实际结果:
父函数控制台记录EventEmitter,来自ipcmain调用的控制台日志记录数据库数组。我认为您的问题在于您认为该方法返回什么。在函数
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);
});
});
}
函数将返回一个承诺,该承诺解析为您期望返回的结果。由于您使用的是wait
关键字,因此调用此函数的方式应该保持不变
// 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);
})
// 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);
});
});
}