p-chores
v0.1.3
Published
String together your potentially promise-returning functions into a chain of responsibility. (The fallback pattern trying all strategies one after the other until one of them solves the task.)
Downloads
10
Maintainers
Readme
p-chores
String together your potentially promise-returning functions into a chain of responsibility. (The fallback pattern trying all strategies one after the other until one of them solves the task.)
I rolled my own because I was too impatient waiting for promisefallback to merge my pull requests.
Usage
see test/usage.mjs
API
This module exports one function:
promiseChainOfResponsibility([strategies[, opt]])
Returns a function. Let's call that one cor
.
opt
is an optional options object which supports these keys:
accept
: A function that synchronously decides whether its first argument is a valid solution. Its return values is considered boolean. Defaults to the internalnonEmpty
function which accepts anything exceptnull
andundefined
.unsolved
: Which value to use as the (non-)solution when none of the strategies gave anaccept
able solution. The value forunsolved
won't be checked for itsaccept
ability.
When you run cor
, it returns a promise for the solution.
The solution is determined by strategies
, which should be array-like.
Each strategy can be a function, a Promise, or any other value.
Strategies are probed one after the other until one succeeds,
i.e. yields an acceptable result,
determined by these steps (conceptually):
- Let
pot
(potential solution) be the strategy itself.- If there is no strategy left, solve with
opt.unsolved
.
- If there is no strategy left, solve with
- If your now current
pot
is a function, invoke it with the same context and arguments ascor
was invoked, and use its result as your newpot
. - If your now current
pot
is a then-able, defer until it's resolved, then use the resolution value as your newpot
. - Call
opt.accept
with your currentpot
as the first argument.- In case of a
true
-y result, solve withpot
. - Otherwise, try the next strategy.
- In case of a
Known issues
- Needs more/better tests and docs.
License
ISC