这是我的工作人员的代码:
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是唯一一个给我一个错误的函数。
Worker.postMessage()
的第二个参数用于保存要将所有权转移到主窗口的对象列表。这仅限于某些特定类型(主要是ArrayBuffer
s和Bitmap
s)。
解释错误信息:你的第二个参数是["some string"]
,"some string"
在索引0
,JS认为你想转移那个对象(这显然不是你的意图)。
只要删除['http://localhost:9000']
,你应该没事。
有关详细信息和示例,请参阅https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage。