0.1.1 • Published 2 years ago

prsms v0.1.1

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

prsms

2 utility functions that wrap an array of items and a (a/s)ynchronous call into Promise.all() for concurrency.

The synchronous callback version can be used to avoid blocking the thread with long calls to synchronous functions.

const crypto = require('crypto')
const { s } = require('prsms')

const items = new Array(1000).fill(undefined)

const randomHashes =
  s(items, () => crypto.randomBytes(32))
  .then(rdbs => s(rdbs, (rdb) => crypto.createHash('sha256').update(rdb).digest('hex')))

// do other stuff on the thread

It's the non-blocking equivalent to:

const crypto = require('crypto')
const { s } = require('prsms')

const items = new Array(1000).fill(undefined)

const randomBytes = await s(items, () => crypto.randomBytes(32))
const hashes = await s(randomBytes, (rdb) => crypto.createHash('sha256').update(rdb).digest('hex'))

// do other stuff after everything is done

Which is about as fast as the fully synchronous version

const crypto = require('crypto')

const items = new Array(1000).fill(undefined)

const randomBytes = items.map(item => crypto.randomBytes(32))

const hashes = randomBytes.map((rdb) => crypto.createHash('sha256').update(rdb).digest('hex'))

And the asynchronous version is mostly made to simplify calls to Promise.all():

await Promise.all(x.map(async (y) => something(y)))

Becomes

const { a } = require('prsms')

await a(x, async (y) => something(y))

It's not lodash but I use it!

And it's type-safe :O