Electron 中正确实现主进程异步操作的 Renderer 端回调机制
本文详解如何在 Electron 应用中通过 IPC 与 contextBridge 实现跨进程异步通知解决 .then() 无效的根本原因——主进程未返回 Promise、Renderer 端盲目 resolve 导致逻辑提前执行的问题。 本文详解如何在 electron 应用中通过 ipc 与 contextbridge 实现跨进程异步通知解决 .then() 无效的根本原因——主进程未返回 promise、renderer 端盲目 resolve 导致逻辑提前执行的问题。在 Electron 开发中一个常见误区是在 Renderer 进程中手动创建 Promise 并立即 resolve却未真正等待主进程完成 I/O 操作。你遇到的 promise.then() not working 并非 Promise 本身失效而是逻辑设计违背了异步通信本质——window.electron.saveJson(dataArray) 是一个无返回值的 IPC 发送调用它不返回 Promise也不阻塞执行而你在 new Promise(...) 内部直接 resolve()导致回调在文件保存尚未开始时就已触发。? 正确方案主进程主动通知 Renderer 端事件监听Electron 的 IPC 机制默认是单向、无返回的ipcRenderer.send / ipcMain.on。若需“等待主进程完成”必须采用事件驱动式响应模型Renderer 发起请求 → 主进程处理并完成后主动发送成功事件 → Renderer 监听该事件执行后续逻辑。1. 配置预加载脚本preload.js——安全暴露 IPC 接口const { contextBridge, ipcRenderer } require(electron);contextBridge.exposeInMainWorld(electron, { // 发起保存请求无返回 saveJson: (data) ipcRenderer.send(saveJson, data), // 注册成功回调监听器推荐使用 once 避免重复绑定 onJsonSaveSuccess: (callback) { ipcRenderer.once(jsonSuccess, (event, success) { callback(success); }); }});?? 注意使用 ipcRenderer.once 而非 on避免多次调用 concatAndSave() 导致监听器重复注册若需支持多次响应请在回调内手动 removeListener 或统一管理事件句柄。 Vozo Vozo是一款强大的AI视频编辑工具可以帮助用户轻松重写、配音和编辑视频。