【中文标题】在使用 WebWorker 时,从导入其他类的文件中导入类会导致 Angular 8 编译失败【英文标题】:Importing classes from files that import other classes results in failed compile for Angular 8 when using WebWorker【发布时间】:2019-10-23 11:35:44【问题描述】:
我正在使用 Angular v8。我有一个名为 model.ts 的文件,如下所示。
import map from 'rxjs/operators';
export class Person
constructor()
然后我有一个名为 test.worker.ts 的 WebWorker 文件,如下所示。
/// <reference lib="webworker" />
import Person from './bo/model';
addEventListener('message', ( data ) =>
const response = `worker response to $data`;
postMessage(response);
);
问题是 Web Workers 无法访问 DOM (https://***.com/a/58414760/10452581)。您不能使用@angular/common,因为它会访问 DOM。我正在处理一个类似的问题(我试图在我的工作人员中使用管道,从@angular/common 导入)。这很令人沮丧,因为我使用的 @angular/common 的方法和类与 DOM 无关。到目前为止,我发现的唯一可能的解决方案是使用在 worker 之外操作 DOM 的库(如果可能的话)做你需要做的工作。
TL;DR:您无法在 web worker 中访问 DOM,甚至无法使用访问它的库,因此请尽可能在 worker 之外进行。
edit:作为一个更好的解释,网络工作者不仅不能访问 DOM,他们也不能访问 DOM 以保证线程安全。 (https://***.com/a/56715738/10452581) 和 (https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers#about_thread_safety)。