SvinkaBacilka
@SvinkaBacilka
личинка front-end Developer-а

Как правильно работать с воркерами в js?

Работаю с веб воркерами и столкнулся с такой проблемой:
  • Данные не попадают в воркер через worker.postMessage(someData)
  • Несмотря на многие примеры в интернете я не могу вызвать console.log('text') в воркере
  • Как это дебажить??? Мало того что консоль не отработывает так после изменения файла воркера вебпак не подтягивает его и работает со старым


Буду очень благодарен за подробное описание этой технологии и как с ней работать.
P. S. Устал читать статьи с одним и тем же примером из документации и о том как это стильно, можно, молодёжно и основной поток не блокирует.

Конфиг vue.config.js
configureWebpack: process.env.NODE_ENV === 'development'
    ? {
      module: {
        rules: [
          {
            test: /\.worker\.js$/,
            use: {
              loader: 'worker-loader',
              options: {
                inline: true
              }
            }
          }
        ]
      }
    }
    : {},

Код воркера
self.addEventListener('message', event => {
  const data = event.data;
  switch (data.cmd) {
    case 'getInfo':
      // eslint-disable-next-line no-case-declarations
      const info = fetchInfo(data.token);
      self.postMessage(info);
      break;
    default:
      throw 'Unknown command'
  }
});

Код создания воркера
import Worker from './custom.worker.js'

const worker = new Worker();
      worker.postMessage({
        cmd: 'getInfo',
        data: {
          token
        },
      })
  • Вопрос задан
  • 218 просмотров
Решения вопроса 1
@loonny
UDP:
Для работы с воркерами, установите "worker-loader".
Когда вы воркер импортируете нужно указать "worker-loader!" как префикс пути. Вот пример, смотрите:
import Worker from 'worker-loader!./custom-worker.js'
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы