You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

30 lines
731 B

10 months ago
export default class SleepyWorker extends EventTarget {
worker? : Worker;
timeout? : number;
stringUrl : string | URL;
constructor(stringUrl: string | URL) {
super()
this.stringUrl = stringUrl
}
postMessage(message : any, transfer? : Transferable[]) {
if (this.worker === undefined) {
this.worker = new Worker(this.stringUrl)
this.worker.onmessage = (event : MessageEvent) => {
this.dispatchEvent(new MessageEvent("message", { data: event.data }))
}
} else {
self.clearTimeout(this.timeout)
}
this.worker.postMessage(message, transfer)
this.timeout = self.setTimeout(() => {
this.worker.terminate()
this.worker = undefined
}, 2500)
}
}