Не удалось выполнить "postMessage" для "DedicatedWorkerGlobalScope": значение по индексу 0 не имеет передаваемого типа

Это код моего работника:

onmessage = function (event) {
    postMessage({'data': event.data}, ['http://localhost:9000']);
};

И это код, где я использую рабочий:

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'});

Но когда вызывается postMessage в рабочем коде, он выдает мне эту ошибку: "Не удалось выполнить" postMessage "для" DedicatedWorkerGlobalScope ": значение в индексе 0 не имеет передаваемого типа".

Я также попытался сериализовать объект с помощью этого кода:

onmessage = function (event) {
        postMessage(JSON.stringify({'data': event.data}), ['http://localhost:9000']);
    };

Но ничего не изменилось.

------ РЕДАКТИРОВАТЬ ------------------------------------------- ---------------------

Я попробовал следующий код в рабочем файле:

function count() {
    var i = 0;
    self.onmessage = function (event) {
        postMessage("Hello " + event.data);
    };

    for (i = 0; i < 5; i++) {
        postMessage(i);
    }
    postMessage("Finished");
}

count();

PostMessage внутри функции onmessage - единственный, который выдает мне ошибку.

0 ответов

Второй параметр Worker.postMessage() предназначен для хранения списка объектов, владение которыми вы хотите передать в главное окно. Это ограничено некоторыми конкретными типами (в основном ArrayBufferс и Bitmapс).

Объяснение сообщения об ошибке: Ваш второй параметр ["some string"] с "some string" по указателю 0 и JS считает, что вы хотите передать этот объект (что явно не было вашим намерением).

Просто удали ['http://localhost:9000'] и ты должен быть в порядке.

См. https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage для получения подробной информации и примеров.

Другие вопросы по тегам