Javascript SharedWorker неправильно взаимодействует с основной программой

Я работал с объектами Worker раньше, и это довольно просто, особенно с учебником.

Естественно, следующим шагом будет работа с SharedWorkers. Я получил его, но теперь кажется, что SharedWorker не отвечает правильно. Я отправляю сообщение postMessage в SharedWorker, и в моем коде SharedWorker отправляет обратно тот же текст, что-то вроде эффекта эха.

К сожалению, SharedWorker возвращает только первую букву сообщения, отправленного из основной программы, и не записывает на консоль строку "Background", чтобы сообщить мне, что SharedWorker запущен. Также сообщение журнала "Установка завершена" подтверждает, что SharedWorker был создан.

Код...

Основной файл HTML...

<html>
<head>
<title>Test</title>
</head>
<body>
<script>
var w = new SharedWorker('sharedworker.js');
w.port.start();
w.port.postMessage("start");
w.port.onmessage = function(e){
  console.log(e.data);
}; 
console.log("Setup complete.");
</script>
</body>
</html>

Скрипт SharedWorker...

onconnect = function(e){
  var port = e.ports[0];
  port.addEventListener('message', function(e){
    port.postMessage(e.data[0]);
  });
  port.start();
  console.log("Background.");
}

Что я делаю неправильно?

1 ответ

Решение

К сожалению, SharedWorker возвращает только первую букву сообщения, отправленного из основной программы

Брось [0] по ссылке на читаемую строку. В настоящее время он связывает строку как массив и возвращает только первый символ.

port.postMessage(e.data); // versus  port.postMessage(e.data[0]);

и не регистрирует на консоли строку "Background", чтобы сообщить мне, что SharedWorker работает

Я не эксперт, но я сделаю предположение. (Я не вижу ничего очевидного в документации, подтверждающей это, и я сам раньше не использовал SharedWorkers.) С точки зрения мультиобработки, это то, что я ожидаю от SharedWorkers - контекст SharedWorker. полностью отделен, console не существует в своем объеме.

В другом SO-потоке есть несколько полезных ответов относительно отладки, которые могут помочь вам в дальнейшей отладке: Как отлаживать веб-работников

Другие вопросы по тегам