Не работает Worker на Javascript

353
06 февраля 2018, 11:14

Доброго времени суток, друзья. Изучал Javascript и столкнулся с такой проблемой - код для подсчета простых чисел в фоновом режиме не работает. В обучении говорилось, что это можно сделать при помощи метода Worker. Собственно, вот код основы:

  function doSearch() {
   // Отключаем кнопку запуска вычислений, чтобы пользователь не мог 
   // запускать несколько процессов поиска одновременно
   searchButton.disabled = true;
   // Получаем начальное и конечное число диапазона поиска
   var fromNumber = document.getElementById("from").value;
   var toNumber = document.getElementById("to").value;
   // Создаем поток
  var worker = new Worker("PrimeWorker.js");
  // Подключаем функцию к событию onMessage, чтобы получать 
  // сообщения от потока
    worker.onmessage = receivedWorkerMessage;
    worker.postMessage(
     { from: fromNumber,
        to: toNumber
     }
     );
   // Информируем пользователя, что вычисления выполняются
   statusDisplay.innerHTML = "Фоновый поток ищет простые числа (от "+
    fromNumber + " до " + toNumber + ") ...";   
   }

А вот соответственно и код PrimeWork.js:

   onmessage = function(event) {
      // Выполняем поиск простых чисел в указанном диапазоне чисел.
      // Диапазон извлекается из свойства event.data
      var primes = findPrimes(event.data.from, event.data.to);
      // Поиск завершен. Отправляем результаты веб-странице
      postMessage(primes);
     };
      function findPrimes(fromNumber, toNumber) {
       // Создать массив целых чисел в указанном диапазоне
       var list = [];
       for (var i=fromNumber; i<=toNumber; i++) {
         if (i>1) list.push(i);
       }
      // Выбираем простые числа
      var maxDiv = Math.round(Math.sqrt(toNumber));
      var primes = [];
      for (var i=0; i<list.length; i++) {
         var failed = false;
         for (var j=2; j<=maxDiv; j++) {
           if ((list[i] != j) && (list[i] % j == 0)) {
              failed = true;
            } else if ((j==maxDiv) && (failed == false)) {
              primes.push(list[i]);
           }
        }
     }
      return primes;
  }
   function receivedWorkerMessage(event) {
     // Получаем список простых чисел
     var primes = event.data;
     // Отображаем список в соответствующей области страницы
     var primeList = "";
     for (var i=0; i<primes.length; i++) {
       primeList += primes[i];
       if (i != primes.length-1) primeList += ", ";
     }
     var primeContainer = document.getElementById("primeContainer");
     primeContainer.innerHTML = primeList;
     if (primeList.length == 0) {
       statusDisplay.innerHTML = "Ошибка поиска.";
     }
     else {
       statusDisplay.innerHTML = "Простые числа найдены!";
     }
     // Разблокируем кнопку запуска поиска
     searchButton.disabled = false;
    }

Во время выполнения скрипта ничего не происходит - кнопка перестает быть активной, однако код вычисления не работает

READ ALSO
Проверка Инпута на пустоту JavaScript [дубликат]

Проверка Инпута на пустоту JavaScript [дубликат]

На данный вопрос уже ответили:

234
Как сделать пагинацию на странице?

Как сделать пагинацию на странице?

У меня есть массив 150 юзеров, я его перебираю и вывожу на странице сразу по 150 пользователейКак их можно выводить по 20 пользователей при нажатии...

366