This is a collection of utility functions for working with async/await code.
npm install @kev_nz/async-tools
Here are the functions provided. Additionally feel free to look at the tests in the project as well.
The delay method allows you to use wait a number of milliseconds before continuing the exection of your code.
const { delay } = require('@kev_nz/async-tools')
(async () => {
await delay(100)
console.info('~100 milliseconds later')
})()
Execute an asynchronous mapping function over an array of returning the result.
const { mapper } = require('@kev_nz/async-tools')
(async () => {
const items = [1, 2, 3]
const mappedItems = await mapper(items, anAsynchronousFunction)
// passing in an additional concurrency value specifies the number of async methods executed at a time
const mappedItemsAgain = await mapper(items, anAsynchronousFunction, 2)
})()
Execute asynchronous reducer functions over a starting value.
const { delay, reducer } = require('@kev_nz/async-tools')
const anAsyncFunction = async val => {
await delay(10)
return val + 1
}
(async () => {
const finalValue = await reducer(0,
anAsyncFunction,
anAsyncFunction,
anAsyncFunction
)
//finalValue 3
})()
Execute an asynchronous function over an array one item at a time.
const { each } = require('@kev_nz/async-tools')
(async () => {
const items = [1, 2, 3]
const [first, second, third] = await each(items, anAsyncFunction)
})()
Take number of functions and compose them together.
const { composer } = require('@kev_nz/async-tools')
const anAsyncFunction = async val => {
await delay(10)
return val + 1
}
const anotherAsyncFunction = async val => {
await delay(10)
return val + 2
}
(async () => {
const asyncChain = composer(
anAsyncFunction,
anotherAsyncFunction,
anAsyncFunction
)
const finalValue = await asyncChain(0)
//finalValue 4
})()
When used with composer it lets you pass additional parameters to a function in the composed.
const { composer, holder } = require('@kev_nz/async-tools')
const anAsyncFunction = async val => {
await delay(10)
return val + 1
}
const anotherAsyncFunction = async (val, secondValue) => {
await delay(10)
return val + secondValue
}
(async () => {
const asyncChain = composer(
anAsyncFunction,
holder(anotherAsyncFunction, 3),
anAsyncFunction
)
const finalValue = await asyncChain(0)
//finalValue 5
})()
Take number of functions and compose them together.
const { timeout } = require('@kev_nz/async-tools')
(async () => {
const result = await timeout(() => thingThatIsLongRunning())
})()
Execute an async function while a condition is true
const { doWhile } = require('@kev_nz/async-tools')
(async () => {
const results = await doWhile(async () => {
await asyncFunction()
}, () => something === true)
})()
While a condition is true execute an async function
const { whileDo } = require('@kev_nz/async-tools')
(async () => {
const results = await whileDo(
() => something === true),
async () => {
await asyncFunction()
})
})()