Вад*_*дим 5 javascript web-worker js-xlsx angular
在项目(在Angular4.3上编写)中,我们使用xlsx创建xlsx/csv表以供用户下载。我们面临的问题是,当我们尝试导出大量数据时,原始json文件可以是100+Mb,转换后的xlsx/csv文件可以是28Mb,并且所有这些转换操作都在客户端处理,它使用所有资源在主线程上。我尝试添加网络工作人员以将所有进程移动到另一个线程,当尝试从工作人员下载创建的文件时,我收到错误:
export.worker.bundle.js:2 未捕获错误:无法保存文件 test.xlsx
单击添加工人的示例代码:
btn.addEventListener('click', (e) => {
const worker = new Worker('./export.worker.bundle.js');
const payload = {
data: [
{ name: 'Moran', role: 'back' },
{ name: 'Alain', role: 'front' },
{ name: 'Tony', role: 'back' },
{ name: 'Mike', role: 'back' },
{ name: 'Abo', role: 'back' },
{ name: 'Toni', role: 'back' }
]
};
worker.postMessage(payload);
worker.onmessage = (e) => {
console.log(e.data);
// worker.terminate();
};
});
Run Code Online (Sandbox Code Playgroud)
工人代码:
(function() {
const XLSX = require('xlsx');
const utils = require('xlsx').utils;
const self = this;
self.onmessage = function(e) {
console.log('Worker data: ', e.data);
const fileName = 'test.xlsx';
const ws = XLSX.utils.json_to_sheet(e.data.data);
const wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, 'test');
XLSX.writeFile(wb, fileName);
self.postMessage('Process complete!');
};
})();
Run Code Online (Sandbox Code Playgroud)
XLSX.writeFile(wb, filename, write_opts) 尝试将 wb 写入文件名。在基于浏览器的环境中,它将尝试强制客户端下载。
这行XLSX.writeFile尝试开始下载,但失败了,而且据我了解,此操作正在从线程中获取所有资源。
可以从worker开始下载文件吗?或者我需要返回主线程?
| 归档时间: |
|
| 查看次数: |
1823 次 |
| 最近记录: |