gpt4 book ai didi

javascript - 如何通过函数外部可用的ipc调用使结果可用?

转载 作者:行者123 更新时间:2023-12-03 12:26:07 24 4
gpt4 key购买 nike

我有两个功能。一个调用ipcmain,另一个调用该函数。 ipcmain调用从数据库中获取一些数据并将其返回。想法是将这些调用组织在服务中。

我的问题是未正确触发,我不确定我的问题在哪里。

如果我在控制台上记录结果,则它会正确记录日志,但是,来自父目录的日志会先调用并记录EventEmitter对象。

我如何才能顺序启动这些函数,并在此函数之外调用ipcmain的结果可用?

我已经尝试过将结果分配给函数顶部的变量,然后在调用后返回该变量,但是结果完全相同。

我也尝试过将两个函数都转换为async await,但没有结果。

我的直觉是“后端” ipcmain.on()函数未发送 promise ,因此在设置该值之前发生了父日志。

// 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调用的控制台日志记录数据库数组。

最佳答案

我认为您遇到的问题是您认为该方法返回的结果。在您的函数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关键字,因此调用此函数的方式应保持不变。

关于javascript - 如何通过函数外部可用的ipc调用使结果可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55838890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com