Как получить экземпляр WebWorker изнутри?

#javascript #web-worker

#javascript #веб-рабочий

Вопрос:

Я создал web worker, используя, но я не смог найти способ получить экземпляр Worker изнутри функции Worker.

Изнутри функции, если я использую ‘this’ или ‘self’, я могу получить только объект ‘DedicatedWorkerGlobalScope’.

Пожалуйста, посмотрите фрагмент кода ниже, чтобы понять проблему:

 /******** below is main.html file *********/
var mywebworker1 = new Worker('mywebworker1.js');
    
// register event listener to receive data from worker
mywebworker1.addEventListener('message', function(e) {
  // at this point, 'this' == 'Worker' instance
  
  // ... other code
});


/******** below is inside mywebworker1.js file *********/
self.addEventListener('message', function(e) {
  // at this point, 'this' == 'DedicatedWorkerGlobalScope' object
  
  // PROBLEM: How to get 'Worker' instance in here ??
  
  // .. other code
}, false);  

Я пытался передать экземпляр Worker в postMessage, например:

 // send command to start counting
mywebworker1.postMessage({"action": "count", "from" : 7, "to": 22, "instance": mywebworker1});

// GOT ERROR message = Uncaught DOMException: Failed to execute 'postMessage' on 'Worker': Worker object could not be cloned.  

Заранее спасибо за помощь ~

Комментарии:

1. Для чего вам это нужно?

2. Мне нужно установить / добавить ‘some states’ в объект ‘Worker’, чтобы вызывающий объект и другие функции могли видеть состояние. Например: он занят? это завершено? каков текущий прогресс?

3. Так почему это нельзя сделать, используя стандартные сообщения и какой-нибудь объект состояния?

4. Приведенный выше фрагмент — это только пример, фактический код довольно обширный, и состояния Worker будут разделены между различными функциями, поэтому я чувствую необходимость добавить некоторые флаги непосредственно к самому объекту Worker вместо создания некоторых глобальных переменных и выполнения множества postMessage (), есть ли у вас какой-либо способ получить экземпляр объекта Worker изнутри самого Worker?