
Security News
Open Source Maintainers Feeling the Weight of the EU’s Cyber Resilience Act
The EU Cyber Resilience Act is prompting compliance requests that open source maintainers may not be obligated or equipped to handle.
Utility method to run function either synchronously or asynchronously using the common `this.async()` style.
The run-async npm package allows you to easily run functions asynchronously, supporting both callback-style and promise-based workflows. It is particularly useful for wrapping functions that use callbacks into a promise-based interface, making it easier to work with in modern JavaScript applications that heavily utilize promises or async/await syntax.
Running asynchronous functions with callback
This feature allows you to run functions that use the traditional callback pattern asynchronously. The example demonstrates wrapping a setTimeout call, which is asynchronous, in runAsync to handle it with a callback.
const runAsync = require('run-async');
runAsync(function (callback) {
setTimeout(function () {
callback(null, 'result');
}, 100);
})(function (err, result) {
console.log(result); // 'result'
});
Using with Promises
This feature demonstrates how run-async can be used to convert a callback-based asynchronous function into a promise-based one. This is particularly useful for integrating older, callback-based APIs into newer codebases that use promises or async/await.
const runAsync = require('run-async');
const asyncFunction = runAsync(function (callback) {
setTimeout(function () {
callback(null, 'result');
}, 100);
});
asyncFunction().then(result => {
console.log(result); // 'result'
});
Awaiting asynchronous functions
This feature showcases how run-async can be used with async/await syntax for an even cleaner and more intuitive asynchronous code. It wraps a callback-based asynchronous function and allows it to be awaited.
const runAsync = require('run-async');
(async () => {
const asyncFunction = runAsync(function (callback) {
setTimeout(function () {
callback(null, 'done');
}, 100);
});
const result = await asyncFunction();
console.log(result); // 'done'
})();
The 'async' package provides a powerful set of utilities for working with asynchronous JavaScript. While run-async focuses on converting callback-based functions into promises, 'async' offers a broader range of tools for managing and coordinating asynchronous operations, making it more versatile for complex workflows.
Bluebird is a fully-featured promise library with a focus on innovative features and performance. Unlike run-async, which is more about adapting callback-based functions to promises, Bluebird provides a wide range of promise-related utilities, including advanced features like cancellation, which are not directly related to run-async's core functionality.
Pify is a module that promisifies functions. It is similar to run-async in that it helps in converting callback-based asynchronous functions to promises, making it easier to work with async/await. However, pify is more focused and streamlined for this specific conversion process, without the additional layer of running the functions asynchronously as run-async does.
Utility method to run a function either synchronously or asynchronously using a series of common patterns. This is useful for library author accepting sync or async functions as parameter. runAsync
will always run them as an async method, and normalize the multiple signature.
npm install --save run-async
Here's a simple example print the function results and three options a user can provide a function.
var runAsync = require("run-async");
var printAfter = function (func) {
var cb = function (err, returnValue) {
console.log(returnValue);
};
runAsync(func, cb)(/* arguments for func */);
};
this.async
printAfter(function () {
var done = this.async();
setTimeout(function () {
done(null, "done running with callback");
}, 10);
});
printAfter(function () {
return new Promise(function (resolve, reject) {
resolve("done running with promises");
});
});
printAfter(function () {
return "done running sync function";
});
var runAsync = require("run-async");
runAsync(function () {
var callback = this.customAsync();
callback(null, a + b);
}, "customAsync")(1, 2);
var runAsync = require("run-async");
runAsync(function () {
assert(this.isBound);
var callback = this.async();
callback(null, a + b);
}).call({ isBound: true }, 1, 2);
runAsync.cb
supports all the function types that runAsync
does and additionally a traditional callback as the last argument signature:
var runAsync = require("run-async");
// IMPORTANT: The wrapped function must have a fixed number of parameters.
runAsync.cb(
function (a, b, cb) {
cb(null, a + b);
},
function (err, result) {
console.log(result);
},
)(1, 2);
If your version of node support Promises natively (node >= 0.12), runAsync
will return a promise. Example: runAsync(func)(arg1, arg2).then(cb)
Copyright (c) 2014 Simon Boudrias (twitter: @vaxilart)
Licensed under the MIT license.
FAQs
Utility method to run function either synchronously or asynchronously using the common `this.async()` style.
The npm package run-async receives a total of 20,991,880 weekly downloads. As such, run-async popularity was classified as popular.
We found that run-async demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
The EU Cyber Resilience Act is prompting compliance requests that open source maintainers may not be obligated or equipped to handle.
Security News
Crates.io adds Trusted Publishing support, enabling secure GitHub Actions-based crate releases without long-lived API tokens.
Research
/Security News
Undocumented protestware found in 28 npm packages disrupts UI for Russian-language users visiting Russian and Belarusian domains.