Synchronously execute asynchronous functions on browsers, Node.js, and Deno. This package is a successor of synckit and sync-threads.
This package provides two functions runAsWorker
and createSyncFn
.
- Wrap an asynchronous function by
runAsWorker
- Create a synchronous function by
createSyncFn
//worker.js
import { runAsWorker } from "unasync";
runAsWorker(async (x) => {
await new Promise((resolve) => setTimeout(() => resolve(1), 1000));
return x + 1;
});
//main.js
import { createSyncFn } from "unasync";
using syncFn = createSyncFn(import.meta.resolve("./worker.js"));
console.log(syncFn(1)); // 2
In the modern JavaScript platform, we can use shared memory SharedArrayBuffer
.
we employ it as a semaphore. First, we lock the semaphore to suspend the main
thread and run the asyncrhonous function in the worker thread. After the
execution, we unlock the semaphore to resume the main thread.
The strong point of this idea, we do not need to modify event-loop in the target virtual machine by FFI.
(c) 2024 TANIGUCHI Masaya, MIT License