unasync
v1.2.0
Published
Synchronously execute asynchronous functions on browsers, Node.js, and Deno
Downloads
2
Maintainers
Readme
UnAsync
Synchronously execute asynchronous functions on browsers, Node.js, and Deno. This package is a successor of synckit and sync-threads.
Features
- ✅ Zero dependencies - No external runtime dependencies
- ✅ Conditional exports - Automatically loads correct implementation for your environment
- ✅ ESM-only - Modern JavaScript modules
- ✅ Cross-platform - Works in Node.js, browsers, and Deno
- ✅ TypeScript support - Full type definitions included
Usage
https://jsr.io/@tani/unasync
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)); // 2Technical Details
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.
Copyright and License
(c) 2024 TANIGUCHI Masaya, MIT License
