p-chores

0.1.3 • Public • Published

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 internal nonEmpty function which accepts anything except null and undefined.
  • unsolved: Which value to use as the (non-)solution when none of the strategies gave an acceptable solution. The value for unsolved won't be checked for its acceptability.

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

  1. Let pot (potential solution) be the strategy itself.
    • If there is no strategy left, solve with opt.unsolved.
  2. If your now current pot is a function, invoke it with the same context and arguments as cor was invoked, and use its result as your new pot.
  3. If your now current pot is a then-able, defer until it's resolved, then use the resolution value as your new pot.
  4. Call opt.accept with your current pot as the first argument.
    • In case of a true-y result, solve with pot.
    • Otherwise, try the next strategy.

Known issues

  • Needs more/better tests and docs.

 

License

ISC

Package Sidebar

Install

npm i p-chores

Weekly Downloads

5

Version

0.1.3

License

ISC

Unpacked Size

8.21 kB

Total Files

7

Last publish

Collaborators

  • mk-pmb