promise-memoize alternatives and similar modules
Based on the "Promises" category.
Alternatively, view promise-memoize alternatives based on common mentions on social networks and blogs.
-
Bluebird
:bird: :zap: Bluebird is a full featured promise library with unmatched performance. -
rfpify
[DEPRECATED] Promisify a result-first callback function. -
Publish / Subscribe
JavaScript implementation of the Publish/Subscribe pattern
SurveyJS - Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of promise-memoize or a related project?
README
promise-memoize
Memoize promise-returning functions. Includes cache expire and prefetch.
- When data expire mode enabled, new values are fetched in advance. Cache
will be always valid, without "gaps".
- Prefetch happens only for items in use. Inactive ones will be GC-ed as usual.
- Errors are not cached
- You still can enable cache with separate expire time for errors, to avoid specific peak loads. For example, set 120s for good result and 1s on fail.
Install
npm install promise-memoize --save
(*) IE9 and below will require setTimeout polyfill for correct work.
Usage example
// Pseudo code
let db = require('mongoose').createConnection('mongodb://localhost/forum');
function lastPosts(limit) {
return db.model('Post').find().limit(limit).orderBy('-_id').lean(true).exec(); // <- Promise
}
let cachedLastPosts = require('promise-memoize')(lastPosts, { maxAge: 60000 });
// Later...
cachedLastPosts(10).then(posts => console.log(posts));
API
promiseMemoize(fn [, options]) -> memoizedFn
Memoize function fn
.
- fn(params...) — function, returning a promise (or any "thenable"). It can have any number of arguments, but arguments should be uniquely castable to strings (see below).
- options — options for memoization (optional)
- maxAge — an amount of milliseconds it should cache resolved
values for (default:
Infinity
, i.e. cache forever). - maxErrorAge — an amount of milliseconds it should cache
rejected values for (default:
0
, i.e. don't cache). - resolve — serialiser to build unique key from
fn
arguments. (default:simple
). Possible values:simple
(string) — convert each param to string & join those.json
(string) — JSON.stringify each param & join results.- function(Array) — custom function, with
fn
params as array on input [ String, Boolean, 'json', function ]
— array with custom functions, specific for eachfn
param position (text shortcuts as above are allowed).
- maxAge — an amount of milliseconds it should cache resolved
values for (default:
Return value is a function with the same signature as fn.
Note. How prefetch works.
If maxAge
used and request to cached data happens after 0.7 * maxAge
time, then:
- cached data returned
fn
call is executed in parallel- cached data will be substituted with new one on success, timeouts will be extended.
So your application will not have to wait for data fetch after cache expire.
memoizedFn(params...) -> promise
Returns result as cached promise (errors are not cached by default). If maxAge
used, tries to prefetch new value before expire to replace cache transparently.
memoizedFn.clear()
Remove all cached data.
License
*Note that all licence references and agreements mentioned in the promise-memoize README section above
are relevant to that project's source code only.