- ...this.workerOptions.poolOptions?.workerOptions,
- });
- worker.on(
- 'message',
- this.workerOptions.poolOptions?.messageHandler ?? WorkerConstants.EMPTY_FUNCTION,
- );
- worker.on(
- 'error',
- this.workerOptions.poolOptions?.errorHandler ?? WorkerConstants.EMPTY_FUNCTION,
- );
- worker.on('error', (error) => {
- this.emitter?.emit(WorkerSetEvents.error, error);
- if (this.workerOptions.poolOptions?.restartWorkerOnError) {
- this.addWorkerSetElement();
+ ...this.workerOptions.poolOptions?.workerOptions
+ })
+ worker.on('message', this.workerOptions.poolOptions?.messageHandler ?? EMPTY_FUNCTION)
+ worker.on('message', (message: WorkerMessage<R>) => {
+ const { uuid, event, data } = message
+ if (this.promiseResponseMap.has(uuid)) {
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ const { resolve, reject, workerSetElement } = this.promiseResponseMap.get(uuid)!
+ 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.once('error', error => {
+ this.emitter?.emit(WorkerSetEvents.error, error)
+ if (
+ this.workerOptions.poolOptions?.restartWorkerOnError === true &&
+ this.started &&
+ !this.workerStartup
+ ) {
+ this.addWorkerSetElement()