p-async-cache

1.0.3 • Public • Published

Build Status

p-async-cache

Cache the promise lookups and avoid fetching the same thing more than necessary.

Install

$ npm install p-async-cache --save

Usage

import PAC from 'p-async-cache'
 
let counter = 0
const cache = new PAC({
  async load (userId) {
    counter ++
    return await getUserFromRemote(userId)
  }
})
 
function get () {
  cache.get(123).then(({value}) => {
    console.log(value, counter)
  })
}
 
get()
get()
 
// [object User] 1
// [object User] 1 (The counter still be 1)

new AC(options)

  • options Object=
    • stale Boolean whether allow stale value
    • stringify function()=JSON.stringify method to serialize the params to a cache key.
    • load AsyncFunction(...params)|function(...params):Promise|function(...params) accepts a normal synchronous function, a function that returns a promise, or an async function, and the params will be the parameters of the .get(...params) method.
    • other options that lru-cache supports

Example for options.stale

import delay from 'delay'
 
const cache = new AC({
  stale: true,
  maxAge: 100,
  load (a, b) {
    return delay(1).then(() => a + b)
  }
})
 
cache.get(1, 2)
.then(({value, stale}) => {
  console.log(value)      // 3
  console.log(stale)      // false
 
  // Delay a timespan which is bigger than `maxAge`
  return delay(101).then(() => cache.get(1, 2))
})
.then(({value, stale}) => {
  console.log(value)      // 3
  console.log(stale)      // true (the value is stale)
 
  return delay(10).then(() => cache.get(1, 2))
})
.then(({value, stale}) => {
  console.log(value)      // 3
  console.log(stale)      // false (if the value is found as stale, it will refresh the value in the background)
})

.get(...params)

  • params any that will be passed into options.load(...params)

Returns Promise

Lookup the value in the cache,

  • if found, then return.
  • if not found,
    • if allow stale values, and the value is stale, then return the value, and refresh value in background.
    • otherwise, load the value with load(...params)

Other methods of lru-cache

  • .reset()
  • .has(...params)
  • .peek(...params)
  • .del(...params)

License

MIT

Package Sidebar

Install

npm i p-async-cache

Weekly Downloads

8,309

Version

1.0.3

License

MIT

Last publish

Collaborators

  • kael