Использование node.js рабочих потоков с приложениями Meteor - PullRequest
2 голосов
/ 07 августа 2020

Я пытаюсь использовать рабочие потоки в своем приложении Meteor для разгрузки задач, интенсивно использующих ЦП. Я использую библиотеку @ arrow / worker вместо модуля worker_threads напрямую. Я попробовал очень простой тестовый код (см. Ниже), но получил следующую ошибку.

events.js:288
      throw er; // Unhandled 'error' event
      ^
ReferenceError: meteorInstall is not defined
    at Object.<anonymous> (meteor://?app/app/app.js:1:15)
    at Module._compile (internal/modules/cjs/loader.js:1158:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at MessagePort.<anonymous> (internal/main/worker_thread.js:162:24)
    at MessagePort.emit (events.js:311:20)
    at MessagePort.onmessage (internal/worker/io.js:78:8)
Emitted 'error' event on Worker instance at:
    at Worker.[kOnErrorMessage] (internal/worker.js:204:10)
    at Worker.[kOnMessage] (internal/worker.js:214:37)
    at MessagePort.<anonymous> (internal/worker.js:141:57)
    at MessagePort.emit (events.js:311:20)
    at MessagePort.EventEmitter.emit (domain.js:482:12)
    at MessagePort.onmessage (internal/worker/io.js:78:8)

Тестовый код:

import worker from '@arrows/worker';

const fn = function (data) {
  console.log('fn');
  return 'abc';
};

const asyncFn = worker(fn);

const runIt = async () => {
  console.log('a');
  try {
    const out = await asyncFn('a');
    console.log('b', out);
  }
  catch (err) { console.log(err); }
}

runIt();
...