如何通过 Web Worker 在 JavaScript - postMessage() 中传递可传输对象数组,即缓冲区以及不可传输对象,即 json obj?

How to pass array of transferable objects i.e. buffer along with non transferable object i.e. json obj via web worker in JavaScript - postMessage()?

所以,这就是我想要实现的目标:

  1. 从 web-worker 调用主线程中的特定函数 onMessage()。
  2. 传递可传输对象数组,即 Uint16Array 缓冲区、Float32Array 缓冲区等
  3. 除上述所有内容外,我还想在发布消息时传递一个简单的布尔对象或整数或字符串值。

例如:

const cornersArray = new Uint16Array(5000), // should go as Transferable object
  trailsArray = new Float32Array(7000); // should go as Transferable object

const state = 1, // integer
  quality = 'High', // string
  isTracking = true; // boolean


this.Worker.postMessage({
  event: 'ShowTrails',
  data: {
    cornersArray: cornersArray,
    trailsArray: trailsArray,
    state: state,
    quality: quality,
    isTracking: isTracking
  }
}, [cornersArray.buffer, trailsArray.buffer]);

因此,主线程的 onMessage() 应该调用 ShowTrails() 并且数据应该作为参数传递。但这是抛出错误,传递的对象不可分离,在 postMessage() 中失败。

我在这方面很菜鸟,第一次使用网络工作者,请帮助我如何实现这一点。我一定是在传递数据的时候做错了。

谢谢!

您没有正确传递可转移缓冲区。试试这个:

this.Worker.postMessage({
  event: 'ShowTrails',
  data: {
    cornersArray: cornersArray.buffer,
    trailsArray: trailsArray.buffer,
    state: state,
    quality: quality,
    isTracking: isTracking
  }
}, [cornersArray.buffer, trailsArray.buffer]);