
Security News
Axios Maintainer Confirms Social Engineering Attack Behind npm Compromise
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.
Functional utility methods to run async code with promises (async/await keywords)
A small library with JS functional utility methods to run async code with promises (async/await keywords)
$ npm install --save rg-async
$ npm i -S rg-async
$ npm t
const rgAsync = require('rg-async');
rgAsync.filter([1,2,3], value => Promise.resolve(value % 2 === 0))
.then(filteredArray => console.log(filteredArray)) // output => [2]
.catch(err => console.log(err));
const rgAsync = require('rg-async');
rgAsync.map([1,2,3], async value => {
try {
const multiplyValue = await getAsyncMultiplyValue(); // some async code which returns 2 as a promise resolved value.
}catch(err){
throw err;
}
return value * multiplyValue;
})
.then(mappedArray => console.log(mappedArray)) // output => [2,4,6]
.catch(err => console.log(err));
const rgAsync = require('rg-async');
const array = [1,2,3];
async function printRgAsyncPlusArrayNumbers(array){
await rgAsync.each([1,2,3], async value => {
const name = await getAsyncName(); // some async code which returns 'rg-async' as a promise resolved value.
console.log(name + ' ' + value);
});
}
printRgAsyncPlusArrayNumbers(array)
.then(() => console.log('All promises resolved')) // output => rg-async 1, rg-async 2, rg-async 3, All promises resolved
.catch(err => console.log(err));
filter(srcArray, predicate) method invokes in parallel an async predicate function on each item in the given source Array.
This will return a promise to be resolved containing the new array with the items that predicate function returned a truthy value.
The async predicate function follows the standard javascript filter arguments- (value, index, array) and needs to return a promise.
Examples
.then - .catch functionsconst rgAsync = require('rg-async');
rgAsync.filter([1,2,3], value => Promise.resolve(value < 3))
.then(filteredArray => console.log(filteredArray)) // output => [1,2]
.catch(err => console.log(err)); // if exists any case that you throw an error on your predicate function
async/await keywordsconst rgAsync = require('rg-async');
// if you are inside of a async function scope
// if exist any case that you throw an error you should wrap this with try-catch clause
try{
const result = await rgAsync.filter([1,2,3], value => Promise.resolve(value < 3));
console.log(result); // output => [1,2]
}catch(err){
console.log(err);
}
map(srcArray, mapper) method invokes in parallel an async mappercon function on each item in the given source Array.
This will return a promise to be resolved containing the new array with the mapped/transformed items.
The mapper function follows the standard javascript map arguments - (value, index, array)and needs to return a promise.
Examples
.then - .catch functionsconst rgAsync = require('rg-async');
rgAsync.map([1,2,3], value => Promise.resolve(value * 2))
.then(mappedArray => console.log(mappedArray)) // output => [2,4,6]
.catch(err => console.log(err)); // if exists any case that you throw an error on your mapper function
async/await keywordsconst rgAsync = require('rg-async');
// if you are inside of a async function scope
// if exist any case that you throw an error you should wrap this with try-catch clause
try{
const result = await rgAsync.map([1,2,3], value => Promise.resolve(value * 2));
console.log(result); // output => [2,4,6]
}catch(err){
console.log(err);
}
each(srcArray, consumer) method invokes in parallel an async consumer function on each item in the given source Array.
This will return a promise without any resolved value.
The consumer function follows the standard javascript forEach arguments - (value, index, array)and needs to return a promise.
Examples
.then - .catch functionsconst rgAsync = require('rg-async');
rgAsync.each([1,2,3], value => Promise.resolve(console.log(value)))
.then(() => console.log('done')) // output => 1,2,3,done
.catch(err => console.log(err)); // if exists a case that you throw an error on your consumer function
async/await keywordsconst rgAsync = require('rg-async');
// if you are inside of a async function scope
// if exist any case that you throw an error you should wrap this with try-catch clause
try{
await rgAsync.each([1,2,3], value => Promise.resolve(console.log(value)));
console.log('done'); // output => 1,2,3,done
}catch(err){
console.log(err);
}
reduce(srcArray, reducer, accumulator) method invokes in series an async reducer function on each item in the given source Array.
The reducer function transforms an accumulator value based on each item iterated over. The reducer function follows the standard javascript map arguments- (accumulator, currValue, index, array) and needs to return a promise.
This will return a promise to be resolved containing the accumulator final value.
Examples
.then - .catch functionsconst rgAsync = require('rg-async');
rgAsync.reduce([1,2,3], (accumulator, currVal) => Promise.resolve(accumulator + currVal), 0)
.then(accumulator => console.log(accumulator)) // output => 6
.catch(err => console.log(err)); // if exists any case that you throw an error on your reducer function
async/await keywordsconst rgAsync = require('rg-async');
// if you are inside of a async function scope
// if exist any case that you throw an error you should wrap this with try-catch clause
try{
const result = await rgAsync.reduce([1,2,3], (accumulator, currVal) => Promise.resolve(accumulator + currVal), 0);
console.log(result); // output => 6
}catch(err){
console.log(err);
}
series(srcArray) method invokes in series each item in the given source Array.
This will return a promise to be resolved containing the same structure as the srcArray, but with the resolved values
Example
const rgAsync = require('rg-async');
const list = [
async () => await someAsyncCode1(), // let assume that this will return a promise with resolved value of 1
async () => await someAsyncCode2(), // returns 2 as a resolved value
async () => await someAsyncCode3(), // returns 3 as a resolved value
() => Promise.resolve(4) // returns 4 as a resolved value
];
// if you are inside of a async function scope
// if exist a case that you throw an error you should wrap this with try-catch clause
try{
const result = await rgAsync.series(list);
console.log(result); // output => [1,2,3,4]
}catch(err){
console.log(err);
}
// if you aren't inside of async function scope you should use .then method
rgAsync.series(list)
.then(resultArray => console.log(resultArray)); // output => [1,2,3,4]
.catch(err => console.log(err)); // if exists a case that you throw an error on your list of promises
parallel(srcArray) method invokes in parallel each item in the given source Array.
This will return a promise to be resolved containing the same structure as the srcArray, but with the resolved values
Example
const rgAsync = require('rg-async');
const list = [
async () => await someAsyncCode1(), // let assume that this will return a promise with resolved value of 'one'
async () => await someAsyncCode2(), // returns 'two' as a resolved value
async () => await someAsyncCode3(), // returns 'three' as a resolved value
() => Promise.resolve('four') // returns 'four' as a resolved value
];
// if you are inside of a async function scope
// if exist a case that you throw an error you should wrap this with try-catch clause
try{
const result = await rgAsync.parallel(list);
console.log(result); // output => ['one','two','three','four']
}catch(err){
console.log(err);
}
// if you aren't inside of async function scope you should use .then method
rgAsync.parallel(list)
.then(resultArray => console.log(resultArray)); // output => ['one','two','three','four']
.catch(err => console.log(err)); // if exists a case that you throw an error on your list of promises
FAQs
Functional utility methods to run async code with promises (async/await keywords)
We found that rg-async demonstrated a not healthy version release cadence and project activity because the last version was released 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
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.