【问题标题】:Where does a postmessage from a worker called from the render process go?从渲染进程调用的工作人员的 postmessage 去哪里了?
【发布时间】:2019-12-05 05:58:26
【问题描述】:

我正在使用 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)
}

代码的所有其他部分都可以正常工作,但我在控制台中没有收到任何响应。

【问题讨论】:

    标签: javascript html electron web-worker postmessage


    【解决方案1】:

    我想通了。调用 this.self.postmessage() 是向工作人员发布消息。我需要简单地从工作人员那里调用 postmessage() 。在我想要接收消息的文件中,我会这样做:

    worker.onmessage = function (e) {
        // Code
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 2021-05-26
      相关资源
      最近更新 更多