data: elementData
} satisfies WorkerMessage<D>
workerSetElement.worker.postMessage(message)
- this.promiseResponseMap.set(message.uuid, { resolve, reject, workerSetElement })
+ this.promiseResponseMap.set(message.uuid, {
+ resolve,
+ reject,
+ workerSetElement
+ })
})
const response = await sendMessageToWorker
// Add element sequentially to optimize memory at startup
if (this.promiseResponseMap.has(uuid)) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const { resolve, reject, workerSetElement } = this.promiseResponseMap.get(uuid)!
- if (event === WorkerMessageEvents.addedWorkerElement) {
- this.emitter?.emit(WorkerSetEvents.elementAdded, this.info)
- workerSetElement.numberOfWorkerElements++
- resolve(data)
- } else if (event === WorkerMessageEvents.workerElementError) {
- this.emitter?.emit(WorkerSetEvents.elementError, data)
- reject(data)
+ switch (event) {
+ case WorkerMessageEvents.addedWorkerElement:
+ this.emitter?.emit(WorkerSetEvents.elementAdded, this.info)
+ ++workerSetElement.numberOfWorkerElements
+ resolve(data)
+ break
+ case WorkerMessageEvents.workerElementError:
+ this.emitter?.emit(WorkerSetEvents.elementError, data)
+ reject(data)
+ break
+ default:
+ reject(
+ new Error(
+ `Unknown worker message event: '${event}' received with data: '${JSON.stringify(
+ data,
+ undefined,
+ 2
+ )}'`
+ )
+ )
}
this.promiseResponseMap.delete(uuid)
}
})
worker.on('error', this.workerOptions.poolOptions?.errorHandler ?? EMPTY_FUNCTION)
- worker.on('error', error => {
+ worker.once('error', error => {
this.emitter?.emit(WorkerSetEvents.error, error)
if (
this.workerOptions.poolOptions?.restartWorkerOnError === true &&
worker.once('exit', () => {
this.removeWorkerSetElement(this.getWorkerSetElementByWorker(worker))
})
- const workerSetElement: WorkerSetElement = { worker, numberOfWorkerElements: 0 }
+ const workerSetElement: WorkerSetElement = {
+ worker,
+ numberOfWorkerElements: 0
+ }
this.workerSet.add(workerSetElement)
this.workerStartup = false
return workerSetElement