https://github.com/js-bits/timeout
Promise-based timeout
https://github.com/js-bits/timeout
javascript promise timeout
Last synced: 10 months ago
JSON representation
Promise-based timeout
- Host: GitHub
- URL: https://github.com/js-bits/timeout
- Owner: js-bits
- Created: 2021-04-11T01:22:07.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-07-19T02:06:34.000Z (almost 3 years ago)
- Last Synced: 2025-03-27T08:16:44.487Z (about 1 year ago)
- Topics: javascript, promise, timeout
- Language: JavaScript
- Homepage:
- Size: 1010 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Promise-based timeout
A convenient, promise-based way to work with timeouts. It's useful to track asynchronous operations (HTTP requests for instance) latency.
## Installation
Install with npm:
```
npm install @js-bits/timeout
```
Install with yarn:
```
yarn add @js-bits/timeout
```
Import where you need it:
```javascript
import Timeout from '@js-bits/timeout';
```
or require for CommonJS:
```javascript
const Timeout = require('@js-bits/timeout');
```
## How to use
Basic approach:
```javascript
const timeout = new Timeout(1000); // 1 sec
timeout.set().catch(() => {
console.log('Timeout exceeded');
});
```
Alternative approach:
```javascript
const timeout = new Timeout(2000); // 2 sec
timeout.catch(() => {
console.log('Timeout exceeded');
});
// ...
timeout.set();
```
Error handling:
```javascript
const timeout = new Timeout(3000); // 3 sec
timeout.set().catch(reason => {
if (reason.name === Timeout.TimeoutExceededError) {
console.log('Timeout exceeded error');
}
});
```
Actual usage:
```javascript
const timeout = new Timeout(1000); // 1 sec
timeout.catch(() => {
// you can report the exceeded timeout here
console.log('Asynchronous operation timeout exceeded');
});
// fake async operation
const asyncAction = async delay =>
new Promise(resolve => {
setTimeout(resolve, delay);
});
(async () => {
// at the beginning of the operation
timeout.set();
// perform some asynchronous actions which could potentially
// take more time than the specified timeout
const asyncActionPromise = asyncAction(2000); // 2 sec
timeout.catch(() => {
// you can also report the exceeded timeout or abort the operation here
});
await asyncActionPromise;
// when the operation is completed
timeout.clear();
})();
```
## Notes
- You cannot "pause" a timeout or "reset" it. Once it's set, there are only two possibilities: either the timeout can be manually cleared before it is exceeded or the timeout will be exceeded.
- It's possible to clear a timeout before it is even set up but you won't be able to set that timeout up ever again.