Не удалось выполнить "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 для получения подробной информации и примеров.