web-dev-qa-db-fra.com

Variable globale dans Web Worker

J'utilise cet outil Web qui contient une variable globale déclarée. Puis-je accéder à la même (variable globale dans le travailleur 1) dans le travailleur Web nouvellement généré (travailleur 2)?

Lorsque j'ai essayé d'utiliser jQuery dans Web Worker, j'obtiens l'erreur "la fenêtre n'est pas définie". Existe-t-il un moyen d'utiliser jQuery dans un Web Worker?

 importScripts ('jquery-latest.js'); 
 
 fonction fetch_ajax (url) {
 $ .ajax ({
 type: '. GET ', 
 Url: url, 
 Succès: fonction (réponse) {
 PostMessage (réponse); 
 
 
} 
}); 
} 
 
 fetch_ajax ('test.txt'); 
34
Nigilan

Les travailleurs Web n'ont pas d'objet window.

Pour accéder à l'état global, utilisez à la place self, du code qui fonctionnera à la fois sur le thread principal et le thread de travail.

Mais notez que vous ne pourrez toujours pas accéder ou manipuler le parent DOM (par exemple, obtenir window.jQuery via self.jQuery).

Alors que la fenêtre du thread principal self pointe vers l'objet Window, dans les threads de travail self pointe vers un objet WorkerGlobalScope distinct.

57
buley

Basé sur @buley tip, je l'ai fait:

var window = self;

importScripts(/* dependencies here */);

/* my code */

Dans mon cas, j'essayais d'utiliser la bibliothèque ES6-Promise: https://github.com/jakearchibald/es6-promise#readme

17
Felipe