timehandlr
v0.8.15
Published
Scheduling for dynamically repeating or synchronized events.
Downloads
23
Readme
TimeHandlr
Scheduling for dynamically repeating or synchronized events.
Like @sinonjs/fake-timers, but for one-time and repeating events in production code.
Usage
Constructor
import { TimeHandlr } from "timehandlr";
const timeHandler = new TimeHandlr();
addEvent
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();
addEventInterval
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();
addEventIntervalSynched
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, such as Goombas in Mario or flower scenery in Pokemon.
Otherwise identical to addEventInterval
.
cancelEvent
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();
cancelAllEvents
Cancels all events.
const timeHandler = new TimeHandlr();
timeHandler.addEvent(() => console.log("Hello world!"), 3);
timeHandler.advance();
timeHandler.advance();
timeHandler.cancelAllEvents();
timeHandler.advance();
Development
This repository is a portion of the EightBittr monorepo. See its docs/Development.md for details on how to get started. 💖
Running Tests
yarn 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 yarn 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, or run yarn test:run
to run them in headless Chrome.