无法在'DedicatedWorkerGlobalScope'上执行'postMessage':索引0处的值没有可转移类型

时间:2016-11-03 16:32:26

标签: javascript web-worker worker postmessage transferable

这是我工人的代码:

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是唯一一个给我错误的函数。

1 个答案:

答案 0 :(得分:0)

Worker.postMessage()的第二个参数用于保存一个对象列表,这些对象要将所有权转移到主窗口。这仅限于某些特定类型(主要是ArrayBufferBitmap s)。

解释错误消息:您的第二个参数是["some string"],索引为"some string"的{​​{1}},并且JS认为您要传输该对象(显然不是您的意图)。 / p>

只需删除0,就可以了。

有关详细信息和示例,请参见https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage