UNPKG

@arrows/worker

Version:

Simple, promise-based API for native worker threads (with pools)

39 lines (38 loc) 1.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const worker_threads_1 = require("worker_threads"); const types_1 = require("./types"); /** * Defines a worker that can be later used with `spawn` function. * * Use when you want to separate worker definition from spawning a thread pool. * * @param handler Function that performs calculations inside worker threads * @returns Nothing, just defines a worker for use with `spawn` function */ const work = (handler) => { if (worker_threads_1.parentPort === null) { throw new Error("This code should not run in the main thread."); } const port = worker_threads_1.parentPort; port.on("message", async ([id, payload]) => { try { const response = await handler(payload, worker_threads_1.workerData); let result; let transferList; if (response && response[types_1.transferKey]) { result = response.result; transferList = response[types_1.transferKey]; } else { result = response; } port.postMessage([id, result], transferList); } catch (error) { port.postMessage([id, payload, error]); } }); }; exports.work = work; exports.default = work;