这是我工人的代码:
onmessage = function (event) {
postMessage({'data': event.data}, ['http://localhost:9000']);
};
这是我使用worker的代码:
var worker = new Worker("/path/to/my/worker.js");
worker.onmessage = function (event) {
console.log("RECEIVED: ", event.data);
};
worker.onerror = function (err) {
console.log('ERROR: ', err)
};
worker.postMessage({'data': 'blabla', 'msg': 'Hi'});
但是当调用worker代码中的postMessage时,它会给我这个错误: “无法在'DedicatedWorkerGlobalScope'上执行'postMessage':索引0处的值没有可转移类型。”
我也试过用这段代码序列化对象:
onmessage = function (event) {
postMessage(JSON.stringify({'data': event.data}), ['http://localhost:9000']);
};
但一切都没有改变。
------编辑---------------------------------------- ------------------------
我在worker文件中尝试了以下代码:
function count() {
var i = 0;
self.onmessage = function (event) {
postMessage("Hello " + event.data);
};
for (i = 0; i < 5; i++) {
postMessage(i);
}
postMessage("Finished");
}
count();
onmessage函数中的postMessage是唯一一个给我错误的函数。
答案 0 :(得分:0)
Worker.postMessage()
的第二个参数用于保存一个对象列表,这些对象要将所有权转移到主窗口。这仅限于某些特定类型(主要是ArrayBuffer
和Bitmap
s)。
解释错误消息:您的第二个参数是["some string"]
,索引为"some string"
的{{1}},并且JS认为您要传输该对象(显然不是您的意图)。 / p>
只需删除0
,就可以了。
有关详细信息和示例,请参见https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage。