从webworker发送数据到站点上下文失败

时间:2015-07-29 20:29:41

标签: javascript typescript web-worker

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

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

但Chrome声称“TypeError:'在'WorkerGlobalScope'上执行'postMessage'失败':索引0处的值没有可转移类型。”

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

2 个答案:

答案 0 :(得分:4)

您需要首先序列化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]);

答案 1 :(得分:0)

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

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