新版
基于您可以找到这里的解决方案,我构建了一个使用WebWorker来完成任务的简单类。
你需要3个文件才能有一个工作的工人。
- file-loader.d.ts -需要加载WebWorker文件
声明模块“文件加载器?name=name.js!*”{ const值: string;export = value;}
- background-worker.ts -类在应用程序中是可维护的
从"file-loader?name=name.js!./web-worker-example";类导入*作为workerPath从BackgroundWorker {构造函数{让工作者=新工作人员(WorkerPath);worker.onmessage = this.handleMessage;worker.postMessage('Caller:帮助我了解背景工作‘);//消息内容只能包含Javascript对象/用于文档: // https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage // }私有handleMessage(此处: Worker,message: MessageEvent ){ console.log( message.data );switch( message.data ){ case 'Worker: Worker: // .有事要做..。打破;案例‘工人:好的,我会做’:// .有事要做..。休息;案例‘工人:不,我不能’:// .有事要做..。断裂;大小写‘工作者:已完成’:this.terminate();断开;}}
- web-worker-example.ts
// ****************************************************************** Worker Bridge // self是关键字:对该工作人员self.onmessage =桥的引用;函数桥(消息: MessageEvent ){ HandleWork( message.data );CallBack(“完成”);// use: // self.close();//如果您需要从worker环境中终止Worker。}函数CallBack(消息:字符串){ self.postMessage('Worker:‘+ message,未定义);} // ****************************************************************** Worker Body function HandleWork( workTask: string ){ if( workTask == 'Caller:帮助我进行后台工作‘){ CallBack('Ok,我会做’);DoVeryComplexWork();返回;}CallBack(‘不,我不能’);}函数DoVeryComplexWork() { // .例如: for(让我: number = 0;i< 1000000000;i++ ){ if( i% 100000000 == 0){ CallBack('Working');}}
要启动Worker,只需实例化worker new BackgroundWorker()并查看控制台。
旧版
我也遇到了同样的问题,并通过构建一个扩展WebWorker类的服务来解决这个问题。在实践中,服务通过向WebWorker传递两样东西,数据和一个详细说明数据的函数来工作。
我在GitHub上发布了一个例子。所有所需的逻辑都在以下两个文件中。
fibonacci-worker.service.ts
worker.ts
看看调用方法的app.component.ts。
致以问候。