Electron渲染进程从主进程获取值始终为undefined问题排查
问题分析与解决
核心错误出在preload脚本的API定义上:processMessageToGemini和processMessageToChatGPT函数没有返回ipcRenderer.invoke调用的Promise对象。ipcRenderer.invoke本身是异步操作,返回一个Promise,但你的函数没有传递这个Promise,导致渲染进程中await的是一个默认返回的undefined。
修改后的preload代码
import { contextBridge, ipcRenderer } from 'electron' import { electronAPI } from '@electron-toolkit/preload' // Custom APIs for renderer const api = { processMessageToChatGPT: (chatMessages) => { return ipcRenderer.invoke('process-message-to-chatgpt', chatMessages) }, processMessageToGemini: (chatMessage) => { return ipcRenderer.invoke('process-message-to-gemini', chatMessage) } } // Use `contextBridge` APIs to expose Electron APIs to // renderer only if context isolation is enabled, otherwise // just add to the DOM global. if (process.contextIsolated) { try { contextBridge.exposeInMainWorld('electron', electronAPI) contextBridge.exposeInMainWorld('api', api) } catch (error) { console.error(error) } } else { window.electron = electronAPI window.api = api }
也可以用箭头函数的简写形式(效果完全一致):
const api = { processMessageToChatGPT: (chatMessages) => ipcRenderer.invoke('process-message-to-chatgpt', chatMessages), processMessageToGemini: (chatMessage) => ipcRenderer.invoke('process-message-to-gemini', chatMessage) }
修改后,渲染进程调用window.api.processMessageToGemini时会拿到ipcRenderer.invoke返回的Promise,await后就能正确获取主进程返回的Gemini文本内容了。
内容的提问来源于stack exchange,提问作者user25763237
相关产品推荐
相关产品推荐

