https://github.com/evert-arias/repeatify
JavaScript/TypeScript library to run repetitive tasks with throttle control and other cool features
https://github.com/evert-arias/repeatify
javascript nodejs repeat tasks typescript
Last synced: 7 months ago
JSON representation
JavaScript/TypeScript library to run repetitive tasks with throttle control and other cool features
- Host: GitHub
- URL: https://github.com/evert-arias/repeatify
- Owner: evert-arias
- License: mit
- Created: 2022-01-14T05:06:44.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2022-01-15T16:42:28.000Z (about 4 years ago)
- Last Synced: 2025-08-13T13:48:19.362Z (8 months ago)
- Topics: javascript, nodejs, repeat, tasks, typescript
- Language: TypeScript
- Homepage: https://github.com/evert-arias/repeatify
- Size: 58.6 KB
- Stars: 4
- Watchers: 1
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Repeatify
JavaScript/TypeScript library to run repetitive tasks with throttle control and other cool features

## Install
```bash
npm install repeatify
```
## Usage
```javascript
import { throttle } from 'repeatify';
function timeConsuming() {
return new Promise((resolve) => {
setTimeout(() => {
resolve({ data: { datetime: Date.now() } });
}, 200);
});
}
const options = { intervalLimit: 1000, repeat: 10 };
await throttle(timeConsuming, options, {
update: (status) => {},
complete: (result) => {},
error: (error) => {},
});
```
## API
### throttle(task, options, callbacks?)
Execute a promise a certain number of times with a fixed iteration interval.
#### task
Type: `promise`
Promise that will be executed
```javascript
function timeConsuming(context) {
return new Promise((resolve) => {
setTimeout(() => {
resolve({ data: { datetime: Date.now() } });
}, 200);
});
}
```
The context argument provides contextual data of the running task.
`currentIteration`
> current iteration counter
`options`
> a copy of the original options object
`returning object`
The `data` object in the returning object may contain any information to be received in the update event callback.
Example:
```javascript
{ data: { datetime: Date.now() }
```
Add `abort` in the returning object to exit the process at the current cycle.
Example:
```javascript
{ abort: true, data: { datetime: Date.now() }
```
#### options
Type: `object`
Options object to set execution parameters
```javascript
{ repeat: 10, intervalLimit: 1000}
```
`repeat`
> The number of times to execute the given promise
`intervalLimit`
> Sets the minimum interval for the execution
#### callbacks
Type: `object`
> Callbacks to handle events
```javascript
{
update: (status) => {},
complete: (result) => {},
error: (error) => {},
}
```
`update` (callback)
> Triggered at the end of every cycle. Provides an object with data related to the running task.
`status` object
```javascript
{
currentIteration: 1,
elapsedTime: 203,
finalElapsedTime: 1000,
throttleApplied: 797,
taskResult: { data: { datetime: 1642197014924 } }
}
```
`complete` (callback)
> Triggered when execution has finished. It provides an object with result data.
`result` object
```javascript
{
exitMode: 0,
totalElapsedTime: 10171,
options: { intervalLimit: 1000, repeat: 10 }
}
```
`exitMode`: Indicates how the execution ended; 0 = Normal (at last cycle), 1 = Abort (as per request).
`totalElapsedTime`: The final duration time of the execution.
`options`: This object is a copy of the original options object passed as argument.
`error` (callback)
> This callback method gets triggered if there is an error on the task execution.