oj-promise-utils

various promise utilities

Usage no npm install needed!

<script type="module">
  import ojPromiseUtils from 'https://cdn.skypack.dev/oj-promise-utils';
</script>

README

promise utils

Various promise utilities

Usage

import

import { poll } from "oj-dom-utils"

poll

await poll(
  () => fetch(url).then(x => x.text()), // function, must return Promise
  x => x === "ok", // test function, must return boolean
  [500, 10000], // timeouts [start ms, end ms]
  10 // maximum attempts, timeouts are mapped to this value (lineair)
)

pause

await pause(1000).promise // pauses for 1 second

const p = pause(1000, false) // timer isn't executed

p.promise.catch(() => {}) // call p.reject() to cancel
p.start() // timer is executed
p.reject()
await p.promise

pauseIncrement

const pause = await pauseIncrement([0,4], [100, 2000], true)
await pause().promise // pauses for 100 ms
await pause().promise // pauses for 575 ms
await pause().promise // pauses for 1050 ms
await pause().promise // pauses for 1525 ms
await pause().promise // pauses for 2000 ms
await pause().promise // pauses for 2000 ms etc ...

delegate

const d = delegate<boolean>()
// use d.promise somewhere
d.resolve(true) // d.promise is resolved

singleton

const get = singleton(url => fetch(url).then(x => x.json()))
get() // executes api call
get() // reuses previous call and returns that promise
await get() // reuses previous call and returns that promise
get() // executes api call because the previous call was resolved, returns a new promise

debounce

const get = debounce(1000, () => fetch(url).then(x => x.json()))

throttle

const get = throttle(1000, () => fetch(url).then(x => x.json()))