Cache the promise lookups and avoid fetching the same thing more than necessary
npm install p-async-cache
Cache the promise lookups and avoid fetching the same thing more than necessary.
``sh`
$ npm install p-async-cache --save
`js
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)
`
- options Object=Boolean
- stale whether allow stale valuefunction()=JSON.stringify
- stringify method to serialize the params to a cache key.AsyncFunction(...params)|function(...params):Promise|function(...params)
- load 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
`js
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)
})
`
- 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)
- .reset().has(...params)
- .peek(...params)
- .del(...params)`
-
MIT