Всем привет. Предположим есть файл - 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);
}
При передаче данные сериализуются, в следствии чего нельзя передать функцию. Функции, которые должны выполнится внутри воркера должны быть внутри воркера.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Нужно найти элемент на странице по значению текстаЕсть селектор contains, но он ищет по сути вхождение подстроки в строку