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

相关推荐
quantdash_cc6 小时前
如何检查滚动收益率计算中的窗口长度不足?——从数学定义到 Pandas 实现
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
砚底藏山河7 小时前
python量化:实时行情WebSocket断线重连状态机
java·python·websocket·金融
CodeGL7 小时前
16、Python Web开发
开发语言·前端·python
ss2737 小时前
30 PostgreSQL ACID特性详解
数据库·postgresql
加点盐7 小时前
别再用 configparser 了:给本地配置加上加密、校验和版本迁移
python
syagain_zsx7 小时前
ODB 与 MySQL:C++ 里的 ORM 实践(类即表、事务铁律与查询封装)
开发语言·数据库·c++·mysql·工具库·1024程序员节
小嘉丶学长7 小时前
Day08 · 字符串(二)
服务器·开发语言·python·学习·1024程序员节
时间售卖铺7 小时前
MySQL 备份
运维·数据库·mysql·云原生
BD_Marathon7 小时前
【Python】列表推导式
python
2501_948122637 小时前
Qs 跨端三方库仓颉适配全流程
python·react native·django·tornado