X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fpools%2Futils.ts;h=5e21c38c0af657dab99aca255e80f0e39888b6a6;hb=3c8a79b4b146fb20de682c19d8b409bfbdf05df4;hp=11c30ad1da9b5cf875be570116fdf240cb0af89b;hpb=c3719753af0a9be03abf722a7543495359e817b5;p=poolifier.git diff --git a/src/pools/utils.ts b/src/pools/utils.ts index 11c30ad1..5e21c38c 100644 --- a/src/pools/utils.ts +++ b/src/pools/utils.ts @@ -10,6 +10,7 @@ import { import type { TasksQueueOptions } from './pool' import { type IWorker, + type IWorkerNode, type MeasurementStatistics, type WorkerNodeOptions, type WorkerType, @@ -119,7 +120,7 @@ export const checkWorkerNodeArguments = ( 'Cannot construct a worker node without worker node options' ) } - if (opts != null && !isPlainObject(opts)) { + if (!isPlainObject(opts)) { throw new TypeError( 'Cannot construct a worker node with invalid options: must be a plain object' ) @@ -203,3 +204,26 @@ export const createWorker = ( throw new Error(`Unknown worker type '${type}'`) } } + +export const waitWorkerNodeEvents = async < + Worker extends IWorker, + Data = unknown +>( + workerNode: IWorkerNode, + workerNodeEvent: string, + numberOfEventsToWait: number +): Promise => { + return await new Promise(resolve => { + let events = 0 + if (numberOfEventsToWait === 0) { + resolve(events) + return + } + workerNode.on(workerNodeEvent, () => { + ++events + if (events === numberOfEventsToWait) { + resolve(events) + } + }) + }) +}