Я пытаюсь веб-работникам запустить скрипт анализа данных, который отнимает много времени, в моем приложении Angular 8, но у меня возникают некоторые проблемы при объединении работника. Я ищу помощь, чтобы выяснить, чего мне не хватает.
Я создал нового работника для своего проекта, используя схемы, включенные в Angular-CLI 8.0.2:
ng g webWorker suggestions --project=my-project
Создает новые suggestions.worker.ts
и tsconfig.worker.ts
и обновляет мои tsconfig.app.json
, angular.json
и package.json
. Они выглядят хорошо для меня, но я могу предоставить детали, если это необходимо.
Я переместил suggestions.worker.ts
в ту же папку, что и служба, которая будет создавать экземпляр работника. Функция создания экземпляра работника выглядит следующим образом:
async calculateSuggestions<T>(
data: T[]
): Promise<Suggestions<T>> {
const worker = new Worker('./suggestions.worker', {
type: 'module',
});
const result = new Promise((resolve, reject) => {
worker.onmessage = ({ data }) => {
resolve(data);
};
worker.onerror = ({ error }) => {
reject(error);
};
}) as Promise<Suggestions<T>>;
worker.postMessage({
data: data
});
return result;
}
Однако, когда я строю свой проект, появляется следующее предупреждение и ошибка:
WARNING in new Worker() will only be bundled if passed a String.
ERROR in chunk suggestions-suggestions-module
suggestions-suggestions-module.js
{..} \node_modules\@ngtools\webpack\src\index.js! {..} \src\app\extractor\
No template for dependency: ConstDependency
Я предполагаю, что я неправильно создаю экземпляр Worker
, что приводит к сбою процесса связывания.
Предупреждение указывает на то, что я должен передать String
конструктору Worker
, но я уже делаю это.
Кроме того, путь после восклицательного знака в строке 3 ошибки на самом деле находится на две папки выше, где я храню свою службу и рабочие файлы. Может быть, это подсказка?
Любые предложения будут высоко оценены!