An open API service indexing awesome lists of open source software.

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

Awesome Lists containing this project

README

          

# Repeatify

JavaScript/TypeScript library to run repetitive tasks with throttle control and other cool features

![image](image.png)

## 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.