intrvl
Version:
Lightweight, efficient extension of the interval API
116 lines (85 loc) • 3.42 kB
Markdown
# intrvl
Lightweight, efficient extension of the interval API
### Installation
```
npm install intrvl
```
### Usage
#### intrvl.setIntrvl(toExecute, intervalMillis, timeoutMillis, maxExecutionCount)
* `toExecute` Function. Executes at every interval
* `intervalMillis` Number. How many milliseconds between execution
* `timeoutMillis` Number. How long to allow the interval to run before stopping. Left `undefined`, the interval will run without a timeout
* `maxExecutionCount` Number. How many times to execute the interval before stopping. Left `undefined`, the interval will run without a max
Returns a new `Intrvl` class instance (running by default)
#### Class: intrvl.Intrvl
Passed back from the `intrvl.setIntrvl` method.
##### Intrvl.stop()
Causes the interval to stop execution, as if a timeout or max had been reached.
```
var setIntrvl = require('intrvl').setIntrvl;
var interval = setIntrvl(function(){
console.log('Hello, World')
}, 1000); // runs indefinitely
interval.on('stop', function(execCount) {
console.log('Stopped after ' + execCount + ' executions');
});
// ... do some other logic, answer some server requests, etc..
// ... oh no, I need to cancel the interval!
interval.stop();
```
##### Event: 'exec'
Emitted on each execution of the interval. Argument is the current execution count
```
var setIntrvl = require('intrvl').setIntrvl;
var interval = setIntrvl(function(){
console.log('Hello, World');
}, 1000, undefined, 5); // executes every second, stops after 5 executions
interval.on('exec', function(execCount) {
console.log('Execution ' + execCount + ' occured');
});
```
##### Event: 'stop'
Emitted when an interval has finished, either by self-imposed limits (timeoutMills, maxExecutionCount), or by calling `.stop()` on a running instance. Argument is the total execution count
```
var setIntrvl = require('intrvl').setIntrvl;
var interval = setIntrvl(function(){
console.log('Hello, World');
}, 1000, undefined, 5); // executes every second, stops after 5 executions
interval.on('stop', function(execCount) {
console.log('Executions: ' + execCount);
});
```
### More Examples
Using competing configurations
```
// runs every 1 ms, ends after 100ms or 100 executions, whichever happens first!
var setIntrvl = require('intrvl').setIntrvl;
var intervalMillis = 1;
var timeoutMillis = 100;
var maxExecutionCount = 100;
var interval = setIntrvl(function() {
console.log('Hello, World');
}, intervalMillis, timeoutMillis, maxExecutionCount);
interval.on('stop', function(execCount) {
console.log('ENDED: ' + execCount);
});
```
Inifinite intrvl still gives us events!
```
// runs every 1 ms, never ends
// might as well use setInterval at this point, right?
// hold up - we can still have fun with events!
var setIntrvl = require('intrvl').setIntrvl;
var intervalMillis = 1;
var timeoutMillis = undefined;
var maxExecutionCount = undefined;
var interval = setIntrvl(function() {
console.log('Hello, World');
}, intervalMillis, timeoutMillis, maxExecutionCount);
interval.on('exec', function(execCount) {
console.log('Execution count is growing, currently at ' + execCount);
});
interval.on('stop', function(execCount) {
console.log('I\'m never-ending, unless someone else tells me otherwise');
});
```