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视频编辑工具,可以帮助用户轻松重写、配音和编辑视频。

相关推荐
m0_3807438716 小时前
为 OpenAI 兼容接口配置教程
开发语言·python·node.js
auspicious航16 小时前
PostgreSQL写入慢全攻略:原因排查与性能调优实战
数据库·postgresql
IvorySQL16 小时前
PostgreSQL 日报|逻辑复制行过滤致数据丢失(8 月 21 日)
数据库·postgresql
重生之我是Java开发战士16 小时前
【Java EE】事务与事务的传播机制
数据库·java-ee
润乾软件16 小时前
Trae+SQLazy 编写复杂 SQL 实践
数据库·sql
会编程的吕洞宾17 小时前
Redis大Key拖垮线上?排查定位与治理实战
数据库·redis·bootstrap
ltl17 小时前
WiredTiger History Store:文档库里的第三种 MVCC
数据库
码农阿豪17 小时前
若依启动突然报 Redis MISCONF?一次从应用报错到磁盘爆满的完整排查记录
数据库·redis·bootstrap
ltl17 小时前
SQLite 查询计划器:没有 ANALYZE 时靠什么猜
数据库
ltl17 小时前
Redis maxmemory 策略:近似 LRU/LFU 与 MEMORY DOCTOR
数据库