UNPKG

node-worker-threads-pool-ts

Version:

Simple worker threads pool using Node's worker_threads module. Compatible with ES6+ Promise, Typescript, Async/Await.

63 lines 2.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PoolWorker = void 0; const worker_threads_1 = require("worker_threads"); const promise_with_timer_1 = require("./promise-with-timer"); class PoolWorker extends worker_threads_1.Worker { constructor(filename, options, isDone) { super(filename, options); this.isDone = isDone; this.ready = false; this.once("online", () => this.readyToWork()); } run(param, taskConfig) { this.ready = false; const timeout = taskConfig.timeout ? taskConfig.timeout : 0; const transferList = taskConfig.transferList; const { isDone } = this; const taskPromise = new Promise((resolve, reject) => { const self = this; function message(res) { if (isDone) { if (isDone(res)) { self.removeListener("message", message); } else { return; } } self.removeListener("error", error); self.readyToWork(); resolve(res); } function error(err) { self.removeListener("message", message); reject(err); } if (!this.isDone) this.once("message", message); else this.on("message", message); this.once("error", error); this.postMessage(param, transferList); }); return new promise_with_timer_1.PromiseWithTimer(taskPromise, timeout).startRace(); } readyToWork() { this.ready = true; this.emit("ready", this); } /** * @override */ terminate() { this.once("exit", () => { setImmediate(() => { this.removeAllListeners(); }); }); return super.terminate(); } } exports.PoolWorker = PoolWorker; //# sourceMappingURL=pool-worker.js.map