Wraps a function with a caching layer
npm install cachify-wrapperWraps a function with a caching layer
Wraps a function with a caching layer
#### Parameters
* fn function callback-last style function
* storage Storage\InMemoryStorageCb)
* options Options (optional, default {})
* hasher Function creates key for KV-storage from fn arguments (optional, default JSON.stringify)
#### Examples
``javascript
const wrapper = require('cachify-wrapper').default;
class Storage {
constructor() {
this.data = new Map();
}
get = (key, cb) => cb(null, this.data.get(key))
set = (key, value, ttl, cb) => {
this.data.set(key, value);
if (ttl > 0) setTimeout(() => this.data.delete(key), ttl);
cb(null, true);
}
del = (key, cb) => cb(null, this.data.delete(key))
}
const storage = new Storage();
let count = 0;
const inc = (a, cb) => cb(null, count += a);
const cached = wrapper(inc, storage, {expire: 100});
setTimeout(() => cached(1, (_error, payload) => console.info(payload)), 0); // Invokes request
setTimeout(() => cached(1, (_error, payload) => console.info(payload)), 100); // Takes cached result
setTimeout(() => cached(1, (_error, payload) => console.info(payload)), 200); // Invokes second request
cached.set(2, 'manual value', 1000, () =>
cached.get(2, (_, result) => {
console.info(result);
cached.del(2, () =>
cached.get(2, (_, result) => console.info(result)))
}));
`
Returns function
Wraps a function with a caching layer
#### Parameters
* fn functionstorage
* Storage\options
* Options?hasher
* Function?
#### Examples
`javascript`
const wrapperPromise = require('cachify-wrapper').promise;
let count = 0;
const inc = async(a) => count += a;
const cached = wrapperPromise(inc, storage, {expire: 1000});
const p1 = cached(1).then((payload) => console.info(payload)); // Invokes request
const p2 = p1.then(() => cached(1).then((payload) => console.info(payload))); // Takes cached result
Returns function (...any): Promise\
Type: Object
#### Properties
* storage Object?
* storage.timeout number? max storage response time before considering it as failed, and invoking fnsource
* Object?
* source.timeout number? max fn response time before considering it as failedexpire
* number? time to consider cached data expired \[in milliseconds]spread
* number? expire time spread (prevents simultaneous deletions saved items from storage)lock
* number? lock timeout (prevents simultaneous concurrent invoke of fn at initial period)stale
* number? additional ttl for stale datattl
* number? forced ttl (TimeToLive) for data (useful if storage is using from multiply services with different expire)retries
* number? number of storage requests passes before fn callerror
* number? ttl for erroneous state cache (prevents frequent call of fn)verbose
* number? verbosity flag
Extends Error
no cache error
storage interface
#### get
##### Parameters
* key Kcb
* CB\
#### set
##### Parameters
* key Kvalue
* Vttl
* numbercb
* CB<boolean>
#### del
##### Parameters
* key Kcb
* CB<boolean>
Type: Object
#### Properties
* e string?v
* V?t
* number?l
* number?
#### get
##### Parameters
* key Kcb
* CB\
#### set
##### Parameters
* key Kvalue
* Vttl
* numbercb
* CB<boolean>
#### del
##### Parameters
* key Kcb
* CB<boolean>
Extends InMemoryStorage
#### expire
##### Parameters
* key Kttl
* number
#### export
Returns Iterable\
#### import
##### Parameters
* dump Iterable\
Type: Object
#### Properties
* value V?timestamp
* number?ttl
* number?
#### Parameters
* source Iterable\
#### get
##### Parameters
* key K
#### set
##### Parameters
* key Kvalue
* V
#### del
##### Parameters
* key K
#### has
##### Parameters
* key K
#### expire
##### Parameters
* key Kttl` number
*