p-chores v0.1.3
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 internalnonEmptyfunction which accepts anything exceptnullandundefined.unsolved: Which value to use as the (non-)solution when none of the strategies gave anacceptable solution. The value forunsolvedwon't be checked for itsacceptability.
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 
potis a function, invoke it with the same context and arguments ascorwas invoked, and use its result as your newpot. - If your now current 
potis a then-able, defer until it's resolved, then use the resolution value as your newpot. - Call 
opt.acceptwith your currentpotas 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