#job?: Task
#isIdle: boolean
+ #isTerminated: boolean
#queue: Task[] = []
#url: string
#worker: Worker | NodeWorker
*/
constructor (worker: string) {
this.#isIdle = true
+ this.#isTerminated = false
this.#queue = []
this.#url = URL.createObjectURL(new Blob([worker], { type: 'text/javascript' }))
BROWSER: this.#worker = new Worker(this.#url, { type: 'module' })
terminate (): void {
this.#job = undefined
this.#worker.terminate()
+ this.#isTerminated = true
}
async #assign<T extends Data> (data: NamedData, enqueue: (task: Task) => number): Promise<NamedData<T>> {
return new Promise(async (resolve, reject): Promise<void> => {
+ if (this.#isTerminated) {
+ reject('Worker terminated')
+ }
const task: Task = {
id: performance.now(),
data,