Introduction to promise-memoize
promise-memoize
is a powerful memoization library tailored specifically for handling promises in JavaScript. By caching the results of promise-returning functions, it helps in significantly improving performance and avoiding unnecessary re-executions. This is particularly useful in scenarios involving repetitive and costly asynchronous operations.
Why Use promise-memoize
?
Memoization is a key optimization technique that stores the results of expensive function calls and returns the cached result when the same inputs occur again. promise-memoize
extends this concept to promises, enhancing the efficiency of asynchronous operations.
Getting Started
To use promise-memoize
, install it via npm:
npm install promise-memoize
Here’s a basic example to help you get started:
const memoize = require('promise-memoize');
async function fetchData() {
// Simulate a data fetching operation
return new Promise(resolve => setTimeout(() => resolve('data'), 1000));
}
const memoizedFetchData = memoize(fetchData);
memoizedFetchData().then(console.log); // Fetches data and caches it memoizedFetchData().then(console.log); // Returns cached data
API Examples
Basic Usage
const memoizedFunc = memoize(asyncFunction, { maxAge: 5000 });
memoizedFunc('arg1').then(console.log); memoizedFunc('arg1').then(console.log); // Cached result returned if within 5 seconds
Handling Multiple Arguments
const memoizedFunc = memoize(multiArgFunction, { primitive: true });
memoizedFunc('arg1', 'arg2').then(console.log); memoizedFunc('arg1', 'arg2').then(console.log); // Cached result for the arguments combination
Custom Cache Key Generation
const memoizedFunc = memoize(asyncFunction, {
resolve: (arg1, arg2) => `${arg1}-${arg2}`
});
memoizedFunc('arg1', 'arg2').then(console.log); memoizedFunc('arg1', 'arg2').then(console.log); // Custom key-based caching
Example Application
Let’s illustrate how you can use promise-memoize
in a real-world application:
const express = require('express'); const fetch = require('node-fetch'); const memoize = require('promise-memoize');
const app = express(); const port = 3000;
async function getUserData(id) {
const response = await fetch(`https://jsonplaceholder.typicode.com/users/${id}`);
const data = await response.json();
return data;
}
const memoizedGetUserData = memoize(getUserData, { maxAge: 60000 });
app.get('/user/:id', async (req, res) => {
const id = req.params.id;
try {
const data = await memoizedGetUserData(id);
res.json(data);
} catch (error) {
res.status(500).send(error.toString());
}
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
This Express.js application demonstrates how to cache API responses to improve performance significantly, especially on endpoints with high traffic.
Hash: 909abb48fc1351e03b0f37fa5b34094aa95181a985fbff2e14331d65b14b03eb