extra-async-function
An async function is a function that delivers its result asynchronously (through Promise).
📦 Node.js,
🌐 Web,
📜 Files,
📰 JSDoc,
📘 Wiki.
This package is an variant of extra-function, and includes methods for transforming async functions. The result of an async function can be manipulated with negate. If a pure async function is expensive, its results can cached with memoize. Parameters of a function can be manipulated with reverse, spread, unspread. reverse flips the order of parameters, spread spreads the first array parameter of a function, and unspread combines all parameters into the first parameter (array). If you want some functional behavior, compose, composeRight, curry, and curryRight can be used. composeRight is also known as pipe-forward operator or function chaining. If you are unfamiliar, Haskell is a great purely functional language, and there is great haskell beginner guide to learn from.
To control invocation time of a function, use delay. A function can be
rate controlled with debounce, debounceEarly, throttle,
throttleEarly. debounce and debounceEarly prevent the invocation of a
function during hot periods (when there are too many calls), and can be used
for example to issue AJAX request after user input has stopped (for certain
delay time). throttle and throttleEarly can be used to limit the rate of
invocation of a function, and can be used for example to minimize system usage
when a user is constantly refreshing a webpage. Except restrict, all
rate/time control methods can be flushed (flush()) to invoke the target
function immediately, or cleared (clear()) to disable invocation of the
target function.
In addition, is, name, and length obtain metadata (about) information on
an async function. To attach a this to a function, use bind. A few generic
async functions are also included: ARGUMENTS, NOOP, IDENTITY, COMPARE.
This package is available in Node.js and Web formats. To use it on the web,
simply use the extra_async_function global variable after loading with a <script>
tag from the jsDelivr CDN.
Stability: Experimental.
const xasyncfn = require('extra-async-function');
// import * as xasyncfn from "extra-async-function";
// import * as xasyncfn from "https://unpkg.com/extra-async-function/index.mjs"; (deno)
// 1. Basic tests.
async function example1() {
var a = xasyncfn.composeRight(async x => x*x, async x => x+2);
await a(10);
// → 102
var a = xasyncfn.curry(async (x, y) => x+y);
await a(2)(3);
// → 7
var a = xasyncfn.unspread(async (...xs) => Math.max(...xs));
await a([2, 3, 1]);
// → 1.25
}
example1();
Index
References
- MDN Web docs
- Lodash documentation
- Underscore.js documentation
- Function composition
- Debouncing and Throttling Explained Through Examples by David Corbacho
- Learn You a Haskell for Great Good!: Higher order functions by Miran Lipovaca
- Haskell composition (.) vs F#'s pipe forward operator (|>)
- memoizee package by Mariusz Nowak
- memoizerific package by @thinkloop
- compose-function package by Christoph Hermann
- chain-function package by Jason Quense
- extra-function package by Subhajit Sahu
Generated using TypeDoc

