@mapado/swr-promise
v1.2.0
Published
swr-promise is a utility that caches promise results with configurable expiration, error tolerance, and garbage collection to enhance performance and manage cache behavior.
Downloads
19
Readme
swr-promise
Install
$ npm install swr-promise
Usage
import swrPromise from "swr-promise";
const fetchData = (url: string) => fetch(url);
const fiveMinute = 5 * 60 * 1000
const fetchDataSWR = swrPromise(fetchData,{ maxAge: fiveMinute });
fetchDataSWR("https://api.example.com/data")
.then(console.log)
.catch(console.error);
API
swrPromise(promiseFn, [options])
Parameters
promiseFn
: The Promise function to be wrapped.options
(optional): An options object with the following properties:maxAge
: Cache validity period (ms), default is 0, when it is Infinity, it is cached permanentlyswr
: Cache expiration tolerance time (ms), default Infinity (stale-while-revalidate
)sie
: Update error tolerance time (ms), default is Infinity (stale-if-error
)gcThrottle
: Garbage collection throttling time (ms), the default is 0, when it is 0, no garbage collection is performedcacheFulfilled
: Whether to cache the current normal result, the default is true (arguments, value) => booleancacheRejected
: Whether to cache the current exception result, the default is false (arguments, error) => booleanargsEqual
(optional): Compares the two argument arrays for equality to ensure correct matching and lookup of cache entries in the cachestoreCreator
(optional): creates a Map to store cached data, but you can use other media such as SQlite by passing a custom storeCreator function
Returns
- A new function that accepts the same arguments as
promiseFn
and returns a Promise.
Example
import swrPromise from "swr-promise";
const mock = () =>
new Promise((resolve) => setTimeout(() => resolve(Math.random()), 1000));
const swrMock = swrPromise(mock, { maxAge: 1000, swr: 1000 });
await swrMock().then(console.log); // 0.9504613827463109
await swrMock().then(console.log); // 0.9504613827463109 same response
// simulate waiting for 1 second
await sleep(1000);
await swrMock().then(console.log); // 0.9504613827463109 same response, but mock function re-executes
LICENSE
This project is licensed under the MIT License.
Contributing
Contributions are welcome! Please open an issue or submit a pull request.
Acknowledgements
This utility function uses:
concur-promise
to prevents duplicate execution of identical Promise callslodash.isequal
to compare the argumentslodash.throttle
to limit the frequency of garbage collection operations.