Scheduling for dynamically repeating or synchronized events.
Like Lolex, but for one-time and repeating events in production code.
import { TimeHandlr } from "timehandlr";
const timeHandler = new TimeHandlr();
Parameters:
callback: Function
: Callback to run for the event.timeDelay: number | Function
(optional): How long from now to run the callback (by default, 1)....args: any[]
: Any additional arguments to pass to the callback.
Returns: An event with the given callback and time information.
Adds an event to be called once.
const timeHandler = new TimeHandlr();
timeHandler.addEvent(
() => console.log("Hello world!"),
3);
timeHandler.advance();
timeHandler.advance();
// Hello world!
timeHandler.advance();
If args
are provided, they're passed to the callback.
This is similar to Function.call
.
const timeHandler = new TimeHandlr();
timeHandler.addEvent(
console.log.bind(console),
3,
"Hello world!");
timeHandler.advance();
timeHandler.advance();
// Hello world!
timeHandler.advance();
Parameters:
callback: Function
: Callback to run for the event.timeDelay: number | Function
(optional): How long from now to run the callback (by default, 1).numRepeats: number | Function
(optional): How many times to run the event (by default, 1)....args: any[]
: Any additional arguments to pass to the callback.
Adds an event to be called multiple times.
const timeHandler = new TimeHandlr();
timeHandler.addEventInterval(
() => console.log("Hello world!"),
3,
2);
timeHandler.advance();
timeHandler.advance();
// Hello world!
timeHandler.advance();
timeHandler.advance();
timeHandler.advance();
// Hello world!
timeHandler.advance();
If args
are provided, they're passed to the callback.
This is similar to Function.call
.
const timeHandler = new TimeHandlr();
timeHandler.addEventInterval(
console.log.bind(console),
3,
"Hello world!");
timeHandler.advance();
timeHandler.advance();
// Hello world!
timeHandler.advance();
timeHandler.advance();
timeHandler.advance();
// Hello world!
timeHandler.advance();
Parameters:
callback: Function
: Callback to run for the event.timeDelay: number | Function
(optional): How long from now to run the callback (by default, 1).numRepeats: number | Function
(optional): How many times to run the event (by default, 1)....args: any[]
: Any additional arguments to pass to the callback.
Adds an event interval, waiting to start until it's in sync with the time delay.
This is useful for starting animations of objects intended to be animated in sync,
like Goombas in Mario or flower scenery in Pokemon.
Otherwise identical to addEventInterval
.
Parameters:
event: Object
: Event to cancel.
Cancels an event created by one of the addEvent*
methods.
const timeHandler = new TimeHandlr();
const event = timeHandler.addEvent(
() => console.log("Hello world!"),
3);
timeHandler.advance();
timeHandler.advance();
timeHandler.cancelEvent(event);
timeHandler.advance();
Cancels all events.
const timeHandler = new TimeHandlr();
timeHandler.addEvent(
() => console.log("Hello world!"),
3);
timeHandler.advance();
timeHandler.advance();
timeHandler.cancelAllEvents();
timeHandler.advance();
After forking the repo from GitHub:
git clone https://github.com/<your-name-here>/TimeHandlr
cd TimeHandlr
npm install
npm run setup
npm run verify
npm run setup
creates a few auto-generated setup files locally.npm run verify
builds, lints, and runs tests.
npm run watch
Source files are written under src/
in TypeScript and compile in-place to JavaScript files.
npm run watch
will directly run the TypeScript compiler on source files in watch mode.
Use it in the background while developing to keep the compiled files up-to-date.
npm run test
Tests are written in Mocha and Chai.
Their files are written using alongside source files under src/
and named *.test.ts?
.
Whenever you add, remove, or rename a *.test.t*
file under src/
, watch
will re-run npm run test:setup
to regenerate the list of static test files in test/index.html
.
You can open that file in a browser to debug through the tests.