You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:44:59