Глобальная переменная в веб-рабочем
Я использую этого веб-рабочего, у которого есть глобальная переменная, объявленная в нем. Могу ли я получить доступ к тому же (глобальная переменная в работнике 1) у вновь созданного веб-работника (работника 2)?
Когда я попытался использовать jQuery в веб-рабочем, я получаю сообщение об ошибке "окно не определено". Есть ли способ использовать jQuery в Web Worker
?
importScripts('jquery-latest.js');
function fetch_ajax(url) {
$.ajax({
type: 'GET',
url: url,
success: function(response) {
postMessage(response);
}
});
}
fetch_ajax('test.txt');
Ответы
Ответ 1
У веб-рабочих нет объекта window
.
Чтобы получить доступ к глобальному состоянию, используйте self
вместо этого код, который будет работать как для основного потока, так и для рабочего потока.
Но обратите внимание, что вы по-прежнему не сможете получить доступ к родительскому DOM
или управлять им (например, get window.jQuery
через self.jQuery
).
Пока окно основного потока self
указывает на объект Window, в рабочих потоках self
указывает отдельный объект WorkerGlobalScope
.
Ответ 2
Основываясь на подсказке @buley, я сделал это:
var window = self;
importScripts(/* dependencies here */);
/* my code */
В моем случае я пытался использовать ES6-Promise lib: https://github.com/jakearchibald/es6-promise#readme