Я пытаюсь раскрутить веб-работника изнутри веб-работника, используя Chrome.Исторически это было проблемное пространство с Chrome Host API, но:
Согласно ChromeStatus , по состоянию на 2018-10-22
Выделенные работникиможет создавать вложенных работников, но разделяемые работники и сервисные работники не могут.
Создание вложенного выделенного работника из общего работника пока не поддерживается.
В спецификации также есть вложенные разделяемые работники, но естьв настоящее время не планируется поддерживать их.
Повезет мне;Я использую выделенного работника.
Я не могу найти доступной информации, которая формально противоречит этому заявлению о поддержке в Chrome для настольной версии 69 (я использую Chrome 72), и мой вложенный Работник просто сидит на своем дафе иотказывается принести Дженис ее кофе.
У меня есть три движущиеся части в игре: SlaveDriver, Minion и Peon.SlaveDriver делегирует миньон.Миньон делегирует Пеону, Пеон выполняет работу, и каждый получатель берет кредит.
SlaveDriver
(
function(){
var minion = new Worker('./Features/Work/Work.Minion.js');
let crackTheWhip= ()=>
{
let message = {ID: 1};
minion.postMessage(
JSON.stringify(message)
);
console.log(message.ID);
};
let take_the_credit = (message)=>
{
let work = JSON.parse(message.data);
console.log("Hot Coffee!");
console.log(JSON.stringify(work));
};
minion.onmessage = take_the_credit;
return {
GetJaniceHerCoffee: crackTheWhip
};
})();
Миньон ./Features/Work/Work.Minion.js
(
function(){
var self = this;
var peon = new Worker('./Features/Work/Work.Peon.js');
let receiveWorkOrder = (message)=>
{
console.log('Delegating to a Peon');
peon.postMessage(
message.data
);
};
let take_the_credit = (message)=>
{
console.log('Taking the credit');
let work = JSON.parse(message.data);
self.postMessage(JSON.stringify(
work
));
};
peon.onmessage = take_the_credit;
self.onmessage = receiveWorkOrder;
}
)();
Peon ./Features/Work/Work.Peon.js
(
function(){
var self = this;
let receiveWorkOrder = (message)=>
{
console.log("surfing LinkedIn.");
console.log("surfing stackoverflow");
console.log("...wth is this? *sigh*");
let work_result = {Value: "Coffee"};
self.postMessage(JSON.stringify(
work_result
));
};
self.onmessage = receiveWorkOrder;
}
)();
Если я перестану делегироватьна миньона и пусть он выполняет всю работу peon, все идет хорошо.Но, как только я пытаюсь пригласить миньона к пеону, мне это становится не по себе.В DevTools я вижу активацию миньонов в моем списке тем, когда я отправляю сообщение в него.Мой контекст отладки переходит к рабочему потоку, и когда я отправляю сообщение peon, поток Peon добавляется в список потоков, но все распространение останавливается.Логов в консоль не бывает.Контекст отладки не переходит к потоку Peon.Ответный звонок take_the_credit
моего миньона не получает ответа.
Пион просто сидит там и не выполняет свою работу.
Почему мой пион отказывается принести Дженис ее кофе?