Modules@robinpath/promise
promise

@robinpath/promise

0.1.2Node.jsPublic

Async utilities: parallel, race, waterfall, map, retry, throttle, debounce, timeout, and concurrency control

Promise

Async utilities: parallel, race, waterfall, map, retry, throttle, debounce, timeout, and concurrency control

Package: @robinpath/promise | Category: Infrastructure | Type: Utility

Authentication

No authentication required. All functions are available immediately.

Use Cases

Use the promise module when you need to:

  • Wait for all promises -- Use promise.all to perform this operation
  • Wait for all promises (no throw) -- Use promise.allSettled to perform this operation
  • First promise to settle -- Use promise.race to perform this operation
  • First promise to fulfill -- Use promise.any to perform this operation
  • Add timeout to promise -- Use promise.timeout to perform this operation

Quick Reference

FunctionDescriptionReturns
allWait for all promisesResolved values
allSettledWait for all promises (no throw)Settlement results
raceFirst promise to settleFirst result
anyFirst promise to fulfillFirst successful result
timeoutAdd timeout to promiseResult or timeout error
delayResolve after delayValue after delay
retryRetry function with backoffResult
parallelRun functions with concurrency limitResults
waterfallRun functions in sequence, passing resultsFinal result
mapMap items with async functionMapped results
filterFilter items with async predicateFiltered items
eachIterate with async functiontrue when done
reduceReduce with async functionReduced result
throttleThrottle function callsThrottled function
debounceDebounce function callsDebounced function
deferredCreate deferred promise{promise, resolve, reject}
sleepSleep for millisecondstrue

Functions

all

Wait for all promises

Module: promise | Returns: array -- Resolved values

promise.all [$p1, $p2, $p3]
ParameterTypeRequiredDescription
promisesarrayYesArray of promises

allSettled

Wait for all promises (no throw)

Module: promise | Returns: array -- Settlement results

promise.allSettled [$p1, $p2]
ParameterTypeRequiredDescription
promisesarrayYesArray of promises

race

First promise to settle

Module: promise | Returns: any -- First result

promise.race [$p1, $p2]
ParameterTypeRequiredDescription
promisesarrayYesArray of promises

any

First promise to fulfill

Module: promise | Returns: any -- First successful result

promise.any [$p1, $p2]
ParameterTypeRequiredDescription
promisesarrayYesArray of promises

timeout

Add timeout to promise

Module: promise | Returns: any -- Result or timeout error

promise.timeout $fetch 5000
ParameterTypeRequiredDescription
promiseanyYesPromise
msnumberYesTimeout ms
messagestringNoError message

delay

Resolve after delay

Module: promise | Returns: any -- Value after delay

promise.delay 1000 "done"
ParameterTypeRequiredDescription
msnumberYesDelay ms
valueanyNoResolved value

retry

Retry function with backoff

Module: promise | Returns: any -- Result

promise.retry $fn 3 1000
ParameterTypeRequiredDescription
fnstringYesAsync function
maxRetriesnumberNoMax retries (default 3)
delayMsnumberNoBase delay ms
backoffbooleanNoExponential backoff

parallel

Run functions with concurrency limit

Module: promise | Returns: array -- Results

promise.parallel $tasks 5
ParameterTypeRequiredDescription
fnsarrayYesAsync functions
concurrencynumberNoMax concurrent

waterfall

Run functions in sequence, passing results

Module: promise | Returns: any -- Final result

promise.waterfall [$step1, $step2]
ParameterTypeRequiredDescription
fnsarrayYesFunctions (prev: any) => result
initialanyNoInitial value

map

Map items with async function

Module: promise | Returns: array -- Mapped results

promise.map $urls $fetchFn 5
ParameterTypeRequiredDescription
itemsarrayYesItems
fnstringYesAsync mapper
concurrencynumberNoMax concurrent

filter

Filter items with async predicate

Module: promise | Returns: array -- Filtered items

promise.filter $items $isValid
ParameterTypeRequiredDescription
itemsarrayYesItems
fnstringYesAsync predicate

each

Iterate with async function

Module: promise | Returns: boolean -- true when done

promise.each $items $process 3
ParameterTypeRequiredDescription
itemsarrayYesItems
fnstringYesAsync function
concurrencynumberNoMax concurrent

reduce

Reduce with async function

Module: promise | Returns: any -- Reduced result

promise.reduce $items $sum 0
ParameterTypeRequiredDescription
itemsarrayYesItems
fnstringYesAsync reducer
initialanyNoInitial value

throttle

Throttle function calls

Module: promise | Returns: function -- Throttled function

promise.throttle $fn 1000
ParameterTypeRequiredDescription
fnstringYesFunction
msnumberYesMin interval ms

debounce

Debounce function calls

Module: promise | Returns: function -- Debounced function

promise.debounce $fn 300
ParameterTypeRequiredDescription
fnstringYesFunction
msnumberYesDebounce delay ms

deferred

Create deferred promise

Module: promise | Returns: object -- {promise, resolve, reject}

promise.deferred
ParameterTypeRequiredDescription
(none)NoCall with no arguments

sleep

Sleep for milliseconds

Module: promise | Returns: boolean -- true

promise.sleep 1000
ParameterTypeRequiredDescription
msnumberYesDuration ms

Error Handling

All functions throw on failure. Common errors:

ErrorCause
(standard errors)Check function parameters and authentication
@desc "All and validate result"
do
  set $result as promise.all [$p1, $p2, $p3]
  if $result != null
    print "Success"
  else
    print "No result"
  end
enddo

Recipes

1. Multi-step Promise workflow

Chain multiple promise operations together.

@desc "All, all settled, and more"
do
  set $r_all as promise.all [$p1, $p2, $p3]
  set $r_allSettled as promise.allSettled [$p1, $p2]
  set $r_race as promise.race [$p1, $p2]
  print "All operations complete"
enddo

2. Safe all with validation

Check results before proceeding.

@desc "All and validate result"
do
  set $result as promise.all [$p1, $p2, $p3]
  if $result != null
    print "Success: " + $result
  else
    print "Operation returned no data"
  end
enddo

Related Modules

  • json -- JSON module for complementary functionality

Versions (1)

VersionTagPublished
0.1.2latest1 months ago
Install
$ robinpath add @robinpath/promise

Collaborators

Dumitru Balaban
Dumitru Balaban
@dumitru
View all @robinpath modules
Version0.1.2
LicenseMIT
Unpacked Size5.5 KB
Versions1
Weekly Downloads21
Total Downloads21
Stars0
Last Publish1 months ago
Created1 months ago

Category

devops