将数据从网络工作者发送到站点上下文失败

Sending datas from webworker to site context failing

我正在尝试将数据从 webworker 传递到主上下文,但我无法让它工作。我的代码是:

alg.OnProcessEnd = (arg: { array: Uint32Array, max: number }) => {
    (<any>self).postMessage(arg, [arg.array]);
};

但是 chrome 声称 "TypeError: Failed to execute 'postMessage' on 'WorkerGlobalScope': Value at index 0 does not have a transferable type."

所以我的问题是:如何从无法复制的 webworker 正确发送数据(图像数据数组)。

需要先序列化Uint32Array,传过来,再反序列化

一种方法是通过以下操作将其转换为 JSON 数组:

var jsonArray = '[' + Array.prototype.join.apply(arg.array, [',']) + ']';

然后您可以将其转移过来并重新创建 Uint32Array 对象,方法是:

var uint32Array = new Uint32Array( JSON.parse(jsonArray) );

编辑:

作为可转让对象:您缺少 buffer 属性。

(<any>self).postMessage(arg, [arg.array.buffer]);

第二个参数应该是缓冲区而不是数组本身

alg.OnProcessEnd = (arg: { array: Uint32Array, max: number }) => {
    (<any>self).postMessage(arg, [arg.array.buffer]);
};