|
Web Workers и видимость функций
Как в воркере обеспечить видимость глобальных функций, не относящихся к этому воркеру (т. е. созданных в основном потоке)?
P. S. Передача воркеру объекта window генерирует исключение UPD Я не сильно надеюсь на ответ, так как сабж еще малоизвестен. Мне нужно каким-то образом подключить библиотеку (http://www.leemon.com/crypto/BigInt.js), но не могу ее просто импортировать в поток, так как там куча глобальных переменных. Пытаюсь аяксом обращаться к js файлу и применить функцию eval, но почему-то это не срабатывает. Уже пробовал eval('(function(){'+this.responseText+'})()'); //и так eval('('+this.responseText+')'); //и такПока что пытаюсь это сделать в контексте window, но функции не видны. Что я делаю не правильно? |
лучше код (каркас) приведите того что вам нужно в итоге....
и наверное стоит обратить внимание на замыкания |
monolithed, Workers очень специфичная вещь, передавая объект с набором функций, воркер не видит их. Он их видит, как пустые объекты.
Цитата:
main.js: var obj = {f: function(){return 'ok';}} var worker = new Worker('worker.js'); worker.postMessage(obj); worker.onmessage = function(e){ console.log(e.data); }; worker.js: onmessage = function(e){ postMessage(e.data.f()); //TypeError: object is not a function } Нужно каким-то образом заставить видеть воркер функции, которые я передаю. Нашел костыль, который запускаем в воркере: importScripts('BigInt.js'); //подобие includeТак можно импортировать библиотеку, но вот как можно импортировать функцию или набор функций или функции, которые были созданы в главном потоке без создания еще одного файла — хз. |
функции не обязательно внутрь подключать, их можно через postMessage использовать, как вариант. В случае библиотеки лучше импортировать ее с помощью importScripts, в чем здесь костыль - непонятно
|
Цитата:
|
Конечно, postMessage передаёт только строки.
|
Цитата:
|
Цитата:
Цитата:
|
для импорта js-файлов - костыль, но ты же говорил про импорт отдельных функций, так что может пригодится, теоретически...
|
Цитата:
|
Часовой пояс GMT +3, время: 12:02. |
|