Introduction to Promise Memoize
Promise Memoize is a powerful utility library for optimizing JavaScript applications by caching the results of promise-based functions. This can notably enhance the performance of your app by avoiding redundant asynchronous operations.
Key Features and API Examples
1. Basic Usage
To use promise-memoize
, you first need to install it:
npm install promise-memoize
Here’s a simple example of memoizing a promise-based function:
const memoize = require('promise-memoize'); const fetchData = async (id) => { const response = await fetch(`https://api.example.com/data/${id}`); return response.json(); }; const memoizedFetchData = memoize(fetchData); // Usage memoizedFetchData(1).then(data => console.log(data));
2. Custom Cache Key
You can customize the cache key by providing a resolve
function:
const memoizedFetchData = memoize(fetchData, { resolve: (id) => `data-${id}` });
3. Expiration
Set a cache expiration time to ensure the data is refreshed periodically:
const memoizedFetchData = memoize(fetchData, { maxAge: 60000 // Cache expires in 60 seconds });
4. Cache Management
Explicitly clear the cache when needed:
// Clear all cache memoizedFetchData.clear(); // Clear a specific cache entry memoizedFetchData.clear('data-1');
5. Error Handling
Handle errors gracefully within cached functions:
const fetchDataWithError = async (id) => { if (id < 0) throw new Error('Invalid ID'); const response = await fetch(`https://api.example.com/data/${id}`); return response.json(); }; const memoizedFetchDataWithError = memoize(fetchDataWithError); memoizedFetchDataWithError(-1).catch(err => console.error(err.message));
Application Example
In this example, we will create a simple application that makes API calls to fetch user data. We will utilize promise-memoize to optimize these calls.
const memoize = require('promise-memoize'); const fetchUserData = async (userId) => { const response = await fetch(`https://api.example.com/user/${userId}`); return response.json(); }; const memoizedFetchUserData = memoize(fetchUserData, { maxAge: 300000 }); // Cache for 5 minutes // Express setup const express = require('express'); const app = express(); app.get('/user/:id', async (req, res) => { try { const data = await memoizedFetchUserData(req.params.id); res.json(data); } catch (err) { res.status(500).send(err.message); } }); app.listen(3000, () => { console.log('Server is running on port 3000'); });
Using promise-memoize in the above Node.js application ensures that repeated calls to fetch the same user data within 5 minutes will be served from the cache, thereby reducing the number of API requests and enhancing application performance.
Hash: 909abb48fc1351e03b0f37fa5b34094aa95181a985fbff2e14331d65b14b03eb