Files
cut-abstractions/samples/WorkerHelper.ts
2025-07-14 16:04:08 +08:00

45 lines
1.2 KiB
TypeScript

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
}
}