@se-oss/deasync
@se-oss/deasync is a Node.js addon that enables synchronous execution of asynchronous functions by blocking the event loop. The core of project is written in Rust for performance and reliability.
📦 Installation
npm install @se-oss/deasync
📖 Usage
Wrapping an Asynchronous Function
deasync
converts an asynchronous function with the conventional callback pattern function(p1, ...pn, callback(error, result))
into a synchronous function. It returns the result and throws an error if one occurs.
import { deasync } from '@se-oss/deasync';
function asyncFunction(input: string, callback: (err: any, result: string) => void) {
setTimeout(() => {
callback(null, `Hello, ${input}!`);
}, 1000);
}
const syncFunction = deasync(asyncFunction);
console.log(syncFunction("World")); // Blocks for 1 second, then prints "Hello, World!"
Blocking Execution with loopWhile
Use loopWhile(predicateFunc)
to block execution while the given predicate function returns true
.
import { sleep } from '@se-oss/deasync';
let done = false;
setTimeout(() => {
done = true;
}, 1000);
loopWhile(() => !done);
// The task is now complete
Sleeping for a Fixed Duration
The sleep function blocks the current thread for the specified number of milliseconds. It behaves similarly to the Atomic.wait()
API.
import { sleep } from '@se-oss/deasync';
console.log(Date.now(), 'Hello');
sleep(1000);
console.log(Date.now(), 'World!');
📚 Documentation
For all configuration options, please see the API docs.
🤝 Contributing
Want to contribute? Awesome! To show your support is to star the project, or to raise issues on GitHub
Thanks again for your support, it is much appreciated! 🙏
🙌 Credits
This project is inspired by deasync, originally created by Vladimir Kurchatkin and later maintained by @abbr.
License
MIT © Shahrad Elahi and contributors.