@arrows/worker
Version:
Simple, promise-based API for native worker threads (with pools)
39 lines (38 loc) • 1.33 kB
JavaScript
;
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;