X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fworker%2Fabstract-worker.ts;h=26468aeb96ae0d5f838518e2e9308b2e31c16c0e;hb=2ea51d625067ca54eba5b8781ec8070dd28966d2;hp=03d954fe62f1933594e4f556511e9762b7093fb5;hpb=8bc7762018845abb73680eb1bbd65802b002ea08;p=poolifier.git diff --git a/src/worker/abstract-worker.ts b/src/worker/abstract-worker.ts index 03d954fe..26468aeb 100644 --- a/src/worker/abstract-worker.ts +++ b/src/worker/abstract-worker.ts @@ -2,6 +2,7 @@ import { AsyncResource } from 'async_hooks' import type { Worker } from 'cluster' import type { MessagePort } from 'worker_threads' import type { MessageValue } from '../utility-types' +import { EMPTY_FUNCTION } from '../utils' import type { KillBehavior, WorkerOptions } from './worker-options' import { KillBehaviors } from './worker-options' @@ -12,8 +13,8 @@ const DEFAULT_KILL_BEHAVIOR: KillBehavior = KillBehaviors.SOFT * Base class containing some shared logic for all poolifier workers. * * @template MainWorker Type of main worker. - * @template Data Type of data this worker receives from pool's execution. - * @template Response Type of response the worker sends back to the main worker. + * @template Data Type of data this worker receives from pool's execution. This can only be serializable data. + * @template Response Type of response the worker sends back to the main worker. This can only be serializable data. */ export abstract class AbstractWorker< MainWorker extends Worker | MessagePort, @@ -101,7 +102,7 @@ export abstract class AbstractWorker< * * @param fn The function that should be defined. */ - private checkFunctionInput (fn: (data: Data) => Response) { + private checkFunctionInput (fn: (data: Data) => Response): void { if (!fn) throw new Error('fn parameter is mandatory') } @@ -156,10 +157,10 @@ export abstract class AbstractWorker< try { const res = fn(value.data) this.sendToMainWorker({ data: res, id: value.id }) - this.lastTask = Date.now() } catch (e) { const err = this.handleError(e) this.sendToMainWorker({ error: err, id: value.id }) + } finally { this.lastTask = Date.now() } } @@ -177,13 +178,15 @@ export abstract class AbstractWorker< fn(value.data) .then(res => { this.sendToMainWorker({ data: res, id: value.id }) - this.lastTask = Date.now() return null }) .catch(e => { const err = this.handleError(e) this.sendToMainWorker({ error: err, id: value.id }) + }) + .finally(() => { this.lastTask = Date.now() }) + .catch(EMPTY_FUNCTION) } }