electron使用new Worker写入文件导致浏览器崩溃
时间:2019-09-27
本文章向大家介绍electron使用new Worker写入文件导致浏览器崩溃,主要包括electron使用new Worker写入文件导致浏览器崩溃使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
main.js
let data1 = []; let data2 = []; for (let i = 0;i < 500000;i++) { let j = i * 500.0 / 60000.0; data1.push([j, 200 * Math.random() + 100]); data2.push([j, 400 * Math.random() + 100]); } let params = { type: 'xls', data: { data1, data2 }, filename: 'text.xls', }; let worker = new Worker('worker.js'); worker.onmessage = (ev) => {
console.log('写入完成'); worker.terminate(); }; worker.postMessage(params);
worker.js
const fs = require( "fs" ); self.onmessage = function (e) { let data = e.data; console.log(data); if (data.type === "xls") { //todo 写入文件流 let writeStream = fs.createWriteStream(data.filename, { encoding: 'utf8' }); //读取文件发生错误事件 writeStream.on('error', (err) => { console.error('发生异常:', err);
self.postMessage({ success: false, message: err }); }); //已打开要写入的文件事件 writeStream.on('open', (fd) => { console.log('文件已打开:', fd); let i = 0; let value = "x\ty\ty1\n"; function write() { if (i >= data.data.data1.length) { writeStream.end(); setTimeout(() => {//todo 不知道为什么,立即发送报错,延迟发送没问题,这样electron窗口就不会崩溃 self.postMessage({ success: true, message: 'complete' }); }, 500); return; } value = data.data.data1[i][0] + "\t" + data.data.data1[i][1] + "\t" + data.data.data2[i][1] + "\n";
i++; writeStream.write(value, () => { write(); }); } writeStream.write(value, () => { write(); }); }); //文件已经就写入完成事件 writeStream.on('finish', () => { console.log('写入已完成..'); }); //文件关闭事件 writeStream.on('close', () => { console.log('文件已关闭!'); }); } };
原文地址:https://www.cnblogs.com/caiyingyong/p/11597964.html
- Git常用命令
- 手把手教你搭建SpringMVC——最小化配置
- Mysql-16-缓存的配置和使用
- 重叠(Overlapped)IO模型
- Mysql-15-mysql分布式应用
- 基于Spring Mvc实现的Excel文件上传下载
- Java程序员的日常—— Arrays工具类的使用
- Mysql-14-mysql的日志管理
- ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
- Java程序员的日常 —— static的用法讲解实践
- WSAEventSelect模型 ---应用实例,重写TCP服务器实例
- Mysql-13mysql的复制
- 蓝牙门禁系统
- Java程序员的日常 —— 工作一天的收获
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 基于UVM的UART验证环境
- 潘石屹用Python解决100个问题 | 打印菱形
- Android:源码解析 Dialog的窗口机制
- Java|获取图片rgb值
- (数据科学学习手札93)利用geopandas与PostGIS进行交互
- 设计模式(三):旅行的角度理解抽象工厂模式
- 机器学习中的优化算法!
- 【进阶篇】Python+Go——带大家一起另寻途径提高计算性能
- 爬取豆瓣高分电影。
- 快速带你上手Hyperledger Fabric环境搭建+开发测试
- 尝鲜使用微众银行WeCross实现基于哈希时间锁定的跨链转账
- Flutter 富文本第三方库 rich_text_widget
- 程序员的数学:线性代数之可视化
- 基于七牛SDK构建的Vue单页图片管理应用
- [Electron]仿写一个课堂随机点名小项目