我想把我的文件从主目录发送到渲染器。但在此之前,我试图检查,如果它真的工作。因此,我console.log(files)。但我得到了错误你能帮我解决这个问题吗?我知道发送不可序列化的对象是不可能的,但我不知道如何实现它。
Uncaught(in promise)错误:无法克隆对象
renderer.js
function App() {
useEffect(() => {
window.electronAPI.handleFile((event, files) => {
console.log(files)
})
})
return (
<div >
<div>
<button onClick={() => {
const test = "From App"
window.electronAPI.sendGetFile(test);
}}>Hello</button>
</div>
</div>
)
}
preload.js
const { contextBridge, ipcRenderer } = require('electron')
contextBridge.exposeInMainWorld('electronAPI', {
sendGetFile: (data) => ipcRenderer.send('send-getFile', data),
handleFile: (files) => ipcRenderer.invoke('handle-file', files).then((filee) => {
console.log(filee)
})
})
main.js
ipcMain.handle('send-getFile', async (event, data) => {
const filee = () => {
const directoryPath = '/home/xyz/Javascript/';
//passsing directoryPath and callback function
fs.readdir(directoryPath, function (err, files) {
//handling error
if (err) {
return console.log('Unable to scan directory: ' + err);
}
//listing all files using forEach
files.forEach(function (file) {
// Do whatever you want to do with the file
console.log(file);
return file
});
});
}
//const filee = "shashank from main"
console.log(data)
mainWindow.webContents.send("handle-file", filee)
// const webContents = event.sender
// const win = BrowserWindow.fromWebContents(webContents)
// win.setTitle(args)
})
1条答案
按热度按时间oxalkeyp1#
似乎你传递了一个回调函数给你的预加载器
handleFile
函数,然后通过ipc传递。注意,所有通过ipc传递的参数都需要通过Structured clone algorithm克隆,而Structured clone algorithm不支持克隆函数。
一个可能实现您所寻找的功能的选项是使用单个ipc调用,通过如下promise返回
filee
值:main.js
renderer.js