make-synchronous
Advanced tools
Comparing version
19
index.js
@@ -13,3 +13,4 @@ import { | ||
function setupWorker(function_) { | ||
parentPort.on('message', async ({arguments_, workerPort, semaphore}) => { | ||
const {workerPort} = workerData; | ||
parentPort.on('message', async ({arguments_, semaphore}) => { | ||
try { | ||
@@ -31,2 +32,6 @@ workerPort.postMessage({result: await function_(...arguments_)}); | ||
if (!cache) { | ||
const {port1: mainThreadPort, port2: workerPort} = new MessageChannel(); | ||
mainThreadPort.unref(); | ||
workerPort.unref(); | ||
const code = ` | ||
@@ -41,12 +46,10 @@ import setupWorker from ${JSON.stringify(import.meta.url)}; | ||
workerData: { | ||
workerPort, | ||
[IS_WORKER_MARK]: true, | ||
}, | ||
transferList: [workerPort], | ||
}); | ||
worker.unref(); | ||
const {port1: mainThreadPort, port2: workerPort} = new MessageChannel(); | ||
mainThreadPort.unref(); | ||
workerPort.unref(); | ||
cache = {worker, mainThreadPort, workerPort}; | ||
cache = {worker, mainThreadPort}; | ||
} | ||
@@ -58,6 +61,6 @@ | ||
return (...arguments_) => { | ||
const {worker, mainThreadPort, workerPort} = createWorker(); | ||
const {worker, mainThreadPort} = createWorker(); | ||
const semaphore = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); | ||
worker.postMessage({arguments_, semaphore, workerPort}, [workerPort]); | ||
worker.postMessage({arguments_, semaphore}); | ||
Atomics.wait(semaphore, 0, 0); | ||
@@ -64,0 +67,0 @@ |
{ | ||
"name": "make-synchronous", | ||
"version": "2.0.0", | ||
"version": "2.0.1", | ||
"description": "Make an asynchronous function synchronous", | ||
@@ -5,0 +5,0 @@ "license": "MIT", |
9294
0.23%139
2.21%