limit-execution
v1.0.3
Published
Limits a given promise execution time triggering cancel callback if reached.
Downloads
6
Maintainers
Readme
limit-execution
This package offers a way to easly limit any promise execution having an optional onCancel callback triggered once the promise exceeds the given "limit".
API
limitExecution(promise: Promise, limit: number, onCancel: () => void): Promise
- Limits a given promise execution under a given time executing an "onCancel" callback if exceeded.
Throws: ExecutionLimitError
if time exceeds limit.
Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| promise | Promise<T>
| The promise to limit it's execution time. |
| limit | number
| The time limit to set provided in milliseconds |
| onCancel | () => void
| a callback to execute once promise execution exceeds given limit |
Returns:
Promise<T>
Example:
Simple promise limit
import { limitExecution, ExecutionLimitError } from 'limit-execution';
const lateResolvingPromise = () => new Promise(resolve => (
setTimeout(resolve, 2000)
));
const main = async() => {
try {
await limitExecution(
lateResolvingPromise(),
1000
);
} catch (error) {
if (error instanceof ExecutionLimitError) {
// Do something
}
}
};
Example:
Aborting axios request
import axios from 'axios';
import { limitExecution } from 'limit-execution';
/**
* Limits a given axios get call, aborts if exceeds 500ms.
* @returns {Promise<*>}
*/
const limitAxiosCall = async() => {
const controller = new AbortController();
const { data } = await limitExecution(
axios.get('https://jsonapi.org/examples/', {
signal: controller.signal
}),
500,
() => controller.abort()
);
return data;
}