它总是返回undefined,请问有什么想法?我需要返回内部fs.reddir但相对于ipcMain
//main
ipcMain.handle('pegaDirRomSalvo', async (event, argx=0) => {
fs.readFile('dataCR.txt', 'utf8', function (err,data) {
if (err) {return '0'}
fs.readdir(data, (err, files) => {
if (err) {throw err;}
return [data,files] //<-------- not going
})
})
})
//render
ipcRenderer.invoke('pegaDirRomSalvo',a=0).then((result)=>{
document.getElementById('divCaminho').innerText = result[0]
})
3条答案
按热度按时间iugsix8n1#
您需要使用
event.sender.send
来触发另一个从main
到renderer
进程的调用,以返回结果,最后一个进程将使用ipcRenderer.on
来侦听它。以下是示例解决方案:渲染器:
主:
如果需要,您可以使用相同的方法返回错误详细信息。
EDIT:此技术通常用于使用
ipcRenderer.send
发送renderer
调用,并使用ipcMain.on
在main
进程上接收它。aiazj4mn2#
ipcMain.handle(channel, listener)
文档:如果listener返回Promise,则Promise的最终结果将作为响应返回给远程调用者。否则,侦听器的返回值将用作应答的值。
可以使用
async/await
和fs.promises
重构代码,使其更具可读性或者可以在主进程中处理错误
toe950273#
任何人在未来看这个:
只是有同样的问题,我没有“访问”
ipcRenderer
在我的渲染脚本。然而,使用预加载脚本,关键是在contextBridge.exposeInMainWorld
API中返回ipcRenderer.invoke
的“承诺结果”:现在你可以在主文件中创建函数了
在renderer中调用它(即
const val = window.renderer.pegaDirRomSalvo(1)
)将(应该)返回[data,files]
的内容