@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.
npm install @se-oss/deasync
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!"
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
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!');
For all configuration options, please see the API docs.
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! 🙏
This project is inspired by deasync, originally created by Vladimir Kurchatkin and later maintained by @abbr.
MIT © Shahrad Elahi and contributors.