Всем привет. Предположим есть файл - script1.js и другие файлы script1.js.., у которых есть некоторые экспортируемые функции со своим контекстом. Есть так же файл main.js, из которого создаётся воркер.
Если создать воркер и передать через postMessage функцию (хоть в свойстве объекта, хоть без), то будет ошибка о невозможности клонировать с указанием функции.
script1.js
export function foo() {
return 0;
}
main.js
import { foo } from './script1';
let worker = new Worker('script1.js');
worker.postMessage(foo);
// Error cloned
Необходимо передать функцию с контекстом в Worker. Есть ли такая возможность и как?
Если нужно выполнить функцию в WebWorker
без вынесения функции в отдельный js файл, и допустимо каждый раз запускать новый WebWorker
, можно сделать это вот так:
function workerTask() {
return Math.random() * Math.random()
}
runInWebWorker(workerTask, console.log);
function runInWebWorker(task, callback) {
task = `${task};(function(){this.postMessage(${task.name}())})();`;
var worker = new Worker(URL.createObjectURL(new Blob([task])));
worker.onmessage = e => worker.terminate() || callback(e.data);
}
При передаче данные сериализуются, в следствии чего нельзя передать функцию. Функции, которые должны выполнится внутри воркера должны быть внутри воркера.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Нужно найти элемент на странице по значению текстаЕсть селектор contains, но он ищет по сути вхождение подстроки в строку