javascript - 从渲染进程调用的工作人员的 postmessage 到哪里去了?
问题描述
我正在使用 ElectronJS 制作一个从图像生成 STL 文件的应用程序,并且我正在使用 OpenCV 来访问图像的每个像素的值。Worker 用于编写 STL 文件。我遇到的复杂情况是我没有在创建工作人员的文件(向工作人员发送消息的同一位置)或主进程中接收到消息。
下面是worker的创建:
let worker = new Worker('../workers/convertor.js')
这是工人的代码
onmessage = function (e) {
//Creating the write stream
let stream = fs.createWriteStream(e.data[1].split('.')[0] + '.stl', {flags: 'w'})
this.self.postMessage([50])
convert(stream, e.data[2])
self.close()
}
这就是我向工作人员发送消息的方式:
function convertFile() {
// Not converting if there is no file selected
if(filePath != null) {
// The mat for image analysis
let src = cv.imread('img-for-analysis', cv.IMREAD_GRAYSCALE)
// Variable to hold the pixel values of the image
let pixelValues = [...Array(src.rows)].map(e => Array(src.cols).fill(null))
//Storing the values of the pixels in the array
for(let i = 0; i < src.rows; i++) {
for (let j = 0; j < src.cols; j++) {
pixelValues[i][j] = src.ucharAt(i, j * src.channels())
}
}
worker.postMessage([filePath, fileName, pixelValues])
}
}
我已将这段代码放在我的 main.js 和 js 文件中,在该文件中创建/发送消息:
onmessage = function(e) {
console.log(e)
}
代码的所有其他部分都可以正常工作,但我没有在控制台中收到任何响应。
解决方案
我想到了。调用 this.self.postmessage() 是向工作人员发布消息。我需要简单地从工作人员那里调用 postmessage() 。在我想要接收消息的文件中,我会这样做:
worker.onmessage = function (e) {
// Code
}
推荐阅读
- bash - 你可以从 bash 执行 aq 函数吗?
- java - REPOSTING - SSL Pinning 以避免 mitm 和加密 api 请求/响应
- c++ - QPalette 传播到 QDialog 不起作用
- javascript - NX Angular Workspace - 无法创建(赛普拉斯权限错误)
- python - 导出具有透明背景的 matplotlib
- python - 查找每一行的最大值 - Pandas 数据框
- .net-core - .NET Core CAP 与 RabbitMQ 多集群配置
- javascript - 如何循环创建 html 卡片 + 循环 JS 对象以从中提取数据?
- angular - NgRx 中的 Reducer 在连续调度第二个操作后采用旧状态
- iis - 仅显示前 20 个字符的错误警报。IIS 上的动态网络