generated from gxc-solutions/gxc-template-repo
Added first files
This commit is contained in:
parent
3be22f1023
commit
aad2fe13e7
29 changed files with 5020 additions and 8 deletions
27
lib/src/web-api/thread.ts
Normal file
27
lib/src/web-api/thread.ts
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
export class Thread<R, F extends (...args: any[]) => R> {
|
||||
private _worker: Worker;
|
||||
|
||||
constructor(fn: F) {
|
||||
const stringFn = `self.onmessage = (event) => {
|
||||
const data = event.data;
|
||||
const fn = ${fn.toString()};
|
||||
const result = fn(...data.data);
|
||||
self.postMessage(result);
|
||||
}`;
|
||||
const jsFile = new File([stringFn], `${fn.name}.js`, { type: "application/javascript" });
|
||||
const jsFileUrl = URL.createObjectURL(jsFile);
|
||||
this._worker = new Worker(jsFileUrl);
|
||||
}
|
||||
|
||||
public run(...args: Parameters<F>): Promise<R> {
|
||||
this._worker.postMessage({ data: [...args] });
|
||||
return new Promise<R>((res, rej) => {
|
||||
this._worker.addEventListener("message", (event) => res(event.data));
|
||||
this._worker.addEventListener("error", (event) => rej(event));
|
||||
});
|
||||
}
|
||||
|
||||
public terminate(): void {
|
||||
this._worker.terminate();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue