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()))