Ensure only one execution is in-flight for a given key at a time
npm install @onestone/singleflightA TypeScript utility that ensures only one execution of a function is in-flight for a given key at a time. If a duplicate call comes in while the original is still processing, the duplicate caller waits for the original to complete and receives the same results.
Inspired by the singleflight Go package.
``bash`
npm install @onestone/singleflight
`typescript
import { Singleflight } from '@onestone/singleflight';
const sf = new Singleflight();
// Example function that simulates an expensive operation
async function fetchUserData(userId: string) {
const result = await sf.do(fetchUserData:${userId}, async () => {`
// Your expensive operation here
// Only one call for the same userId will execute at a time
return await someExpensiveOperation(userId);
});
return result;
}
`typescript
import { Singleflight } from '@onestone/singleflight';
const sf = new Singleflight();
async function fetchUserProfileImpl(userId: string, includeDetails: boolean) {
return await someExpensiveOperation(userId, includeDetails);
}
async function fetchUserProfile(userId: string, includeDetails: boolean) {
// The key is automatically generated based on function name and arguments
return await sf.doAuto(fetchUserProfileImpl, userId, includeDetails);
}
`
Executes and returns the results of the given function, making sure that only one execution is in-flight for a given key at a time.
- key: A unique identifier for this function execution (string, number, or symbol)fn
- : The async function to be executed
Executes a function and ensures only one execution is in-flight at a time, automatically generating a key based on the function name and its arguments.
- fn: The async function to be executedargs`: The arguments to pass to the function
-
- ð Prevents duplicate in-flight requests
- ð TypeScript support with full type safety
- ðŊ Automatic key generation based on function name and arguments
- ðĄ Simple and intuitive API
- ðŠķ Lightweight with zero dependencies
MIT