|
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, время: 00:06. |
|