chronoman
Utility class to simplify use of timers created by setTimeout
.
Features
- Support for one-time (like
setTimeout
) or recurrent (likesetInterval
) timers. - It is possible to repeat action indefinitely (
recurrent
property), specified number of times (repeatQty
property) or depending on result of control function (repeatTest
property). - Time period (timeout) can be: a fixed value, a random value, an item selected from a list depending on action's execution number, or a value returned from specified function.
- Action that is called can be a function or an object specifying function and its call's context.
- Action result is saved in timer's field for further access.
- Timer's start time, stop time and action execution times are saved in
startTime
,stopTime
andexecuteTime
properties correspondingly.
var timer = new Timer({
period: [100, 200, 300, 400, 500, {start: 100, end: 500}],
repeatQty: 100,
passToAction: true,
action: function(tmr) {
console.log("#", tmr.getExecutionQty() + 1, ":", new Date());
},
active: true
});
...
timer.stop();
Installation
Node
npm install chronoman
Bower
bower install chronoman
AMD, <script>
Use dist/chronoman.js
or dist/chronoman.min.js
(minified version).
Usage
ECMAScript 6/2015
import Timer from "chronoman";
Node
var Timer = require("chronoman").Timer;
AMD
define(["path/to/dist/chronoman.js"], function(chronoman) {
var Timer = chronoman.Timer;
...
});
Bower, <script>
<!-- Use bower_components/chronoman/dist/chronoman.js if the library was installed by Bower -->
<script type="text/javascript" src="path/to/dist/chronoman.js"></script>
<script type="text/javascript">
// сhronoman is available via Chronoman field of window object
var Timer = Chronoman.Timer;
...
</script>
Example
var tmrOne = new Timer({
period: function(timer) {
return 1000 + (timer.getExecutionQty() * 100);
},
action: function(timer) {
console.log("---> Timer one. ", timer);
if (! tmrThree.isActive()) {
tmrThree.start();
}
}
});
var tmrTwo = new Timer();
tmrTwo.setPeriod([2000, {start: 1000, end: 1500}])
.setRepeatQty(9)
.setPassToAction(true)
.setAction({
i: 0,
execute: function(timer) {
var nI = ++this.i;
console.log("Timer two. #", nI, timer);
tmrOne.setActive(nI % 2 === 1);
}
});
var tmrThree = new Timer()
.setPeriod(3000)
.setRepeatTest(function() {
return tmrTwo.isActive();
});
tmrThree.onExecute = function() {
console.log("* Timer three. #", this.getExecutionQty() + 1);
};
tmrTwo.start();
See test/chronoman.js
for additional examples.
API
See docs
.
Related projects
Inspiration
This module is inspired by qooxdoo's qx.event.Timer
class.
Licence
Copyright (c) 2013-2020 Denis Sikuler
Licensed under the MIT license.