Angular Web Worker访问共享函数



我正在将一些处理迁移到angular应用程序中的web工作者中。我在helpers.ts文件中有一些共享方法。我希望能够在worker和我的应用程序中访问这些方法。如果我只是简单地复制这些方法,一切都会成功,但有些方法相当复杂,而且似乎是一种反模式,必须维护两个相同的方法。importScripts()是解决这个问题的方法吗?我尝试将这些方法移动到webworker文件中,然后导入该文件,但如果它不是服务,angular会抱怨。

helpers.ts(导入一些类型声明和外部库(:

import { Asset } from "../models/object.model";
.....
import * as clone from 'clone';
export function magic(needle: string, haystack: string){
let theArray = needle.toLowerCase().split('')
theArray.forEach((e,i,a) => a[i] = a[i].replace(/[-[]{}()*+?.\^$|,#s]/g, "\$&"));
let re = RegExp(`.*${theArray.join('.*')}.*`);
return !!haystack.toLowerCase().match(re)
} 
export function magicObjects(needle: string, haystack: string[]) {
var output: string[] = [];
for(var i = 0; i < haystack.length; i++) {
if(magic(needle, haystack[i])) {
output.push(haystack[i]);
}
}
return output;
}
//etc etc etc

你能不能不做这样的

/// <reference lib="webworker" />
import { magic} from './helper.ts';
addEventListener('message', ({ data }) => {
postMessage(magic(data));
});

不过,您必须将方法参数转换为对象。

最新更新