Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

prom-utils

Package Overview
Dependencies
Maintainers
1
Versions
16
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

prom-utils

Promise utilities for looping: rate limiting, queueing/batching, etc.

  • 0.6.1
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
269
decreased by-47.25%
Maintainers
1
Weekly downloads
 
Created
Source

prom-utils

Promise utilities designed for looping.

rateLimit

Limit the concurrency of promises. This can be used to control how many requests are made to a server, for example.

// Limit concurrency to at most 3
const limiter = rateLimit(3)

for (const url of urls) {
    await limiter.add(fetch(url))
}
// Wait for unresolved promises to resolve
await limiter.finish()

batchQueue

Batch calls via a local queue. This can be used to batch values before writing to a database, for example.

Automatically executes fn when batchSize is reached or timeout is reached, if set. The timer will be started when the first item is enqueued and reset when flush is called explicitly or implicitly.

Call queue.flush() to flush explicitly.

Batch size defaults to 500. The last result of calling fn can be obtained by referencing lastResult on the returned object.

Types

export type QueueResult = {
    flush(): Promise<void>
    enqueue(item: any): Promise<void>
    lastResult?: any
}

export interface QueueOptions {
    batchSize?: number
    batchBytes?: number
    timeout?: number
}

export type Queue = (
    fn: (arr: any[]) => any,
    options?: QueueOptions
) => QueueResult

Example

const writeToDatabase = async (records) => {...}
const batchSize = 250

const queue = batchQueue(writeToDatabase, {batchSize})
for (const record of records) {
  await queue.enqueue(record)
}
await queue.flush()

pausable

Pause a loop by awaiting proceed. When pause is called proceed will return a promise that is resolved when resume is called. Otherwise, proceed will return immediately. If timeout is passed, resume will be called after timeout if it is not manually called first.

const shouldProcess = pausable()

onSomeCondition(shouldProcess.pause)
onSomeOtherCondition(shouldProcess.resume)

for (const record of records) {
    await shouldProcess.proceed()
    await processRecord(record)
}

defer

Defer resolving a promise until done is called.

const delay = (milliseconds: number) => {
    const deferred = defer()
    setTimeout(deferred.done, milliseconds, '🦄')
    return deferred.promise
}

pacemaker

Call heartbeatFn every interval until promise resolves or rejects. Returns the value of the resolved promise.

const heartbeatFn = () => {
    // Emit heartbeat
}

const result = await pacemaker(heartbeatFn, someProm)

Keywords

FAQs

Package last updated on 19 Feb 2024

Did you know?

Socket

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.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc