masynco

massive async operations powered by Promise.all

Minimal async map/reduce helper with pluggable limit to handle massive amount of asynchronous operations in node and browser.

Usage

// const masynco = require('masynco') // cjs and mjs are supported
import masynco from 'masynco'

;(async () => {
  // supports async and regular functions
  const fn = async (num) => num + 1

  // supports async array mapping
  const a = await masynco([1, 2, 3], fn)
  console.log(a) // [ 2, 3, 4 ]

  // supports async object mapping
  const o = await masynco({ 'k1': 'v1', 'k2': 'v2' }, fn)
  console.log(o) // { k1: 'v11', k2: 'v21' }

  // supports regular (non-async) functions also
  const fnSync = (num) => num + 1
  const o1 = await masynco({ 'k1': 'v1', 'k2': 'v2' }, fnSync)
  console.log(o1) // { k1: 'v11', k2: 'v21' }
})()

Optionally limit function can be passed for concurrency control:

import masynco from 'masynco'
import plimit from 'p-limit'

;(async () => {
  const fn = async (num) => num + 1
  const o = await masynco({ 'k1': 'v1', 'k2': 'v2' }, fn, plimit(3))
  console.log(o) // { k1: 'v11', k2: 'v21' }
})()

Use in browser as JavaScript module:

<script type="module">
  import masynco from './masynco.js'

  ;(async () => {
    const fn = async (num) => num + 1
    const o = await masynco({ 'k1': 'v1', 'k2': 'v2' }, fn)
    console.log(o) // { k1: 'v11', k2: 'v21' }
  })()
</script>

API

async masynco(input, fn, limit = null)

Returns a new Array or Object formed by applying a given function to each element of input.

iterable

Type: object, array

Input Array or Object to process. Function returns array when input is array and object otherwise.

fn

Type: function (value, key)

Function that is called for every element of input iterable. It receives original value and key and returns new value that is inserted into output iterable.

limit

Type: function

Optional limit function for concurrency control. See p-limit.

Why?

Single interface for applying regular and async map function to every item of input iterable and returning new iterable with original keys and mapped values.

” It saves my time, Al