feat:提交
This commit is contained in:
45
samples/WorkerHelper.ts
Normal file
45
samples/WorkerHelper.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import path from 'path';
|
||||
import { Worker as NodeWorker } from 'worker_threads';
|
||||
|
||||
export class UniversalWorker {
|
||||
private worker: NodeWorker | Worker;
|
||||
|
||||
constructor(workerPath: string | URL) {
|
||||
if (typeof window !== 'undefined' && 'Worker' in window) {
|
||||
// 浏览器环境
|
||||
this.worker = new Worker(workerPath);
|
||||
} else {
|
||||
// Node.js 环境
|
||||
// const resolvedPath = require.resolve(workerPath);
|
||||
this.worker = new NodeWorker(workerPath, { eval: false });
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
postMessage(message: any): void {
|
||||
this.worker.postMessage(message);
|
||||
}
|
||||
|
||||
onMessage(callback: (data: any) => void): void {
|
||||
if ('onmessage' in this.worker) {
|
||||
this.worker.onmessage = (event) => callback(event.data);
|
||||
} else {
|
||||
this.worker.on('message', callback);
|
||||
}
|
||||
}
|
||||
|
||||
onError(callback: (err: Error) => void): void {
|
||||
if ('onerror' in this.worker) {
|
||||
this.worker.onerror = (event) => callback(new Error(event.message));
|
||||
} else {
|
||||
this.worker.on('error', callback);
|
||||
}
|
||||
}
|
||||
|
||||
terminate(): void {
|
||||
this.worker.terminate();
|
||||
}
|
||||
getWorker(){
|
||||
return this.worker
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user