README
controller-repeater
A decorator set to automatically call class methods with an interval
@Repeater
class decorator sets up a loop (via setInterval
) with a heartbeat interval (default: 100ms). On every heartbeat it executes every method marked by a @RepeaterTask
. Particular tasks can be limited by minimum time intervals between them (this interval can't be lesser than the heartbeat interval). A task will not be executed again until previous call is finished.
Note: tasks are also run immediately at the next process tick (via setImmediate
) before loop start.
Decorators
@Repeater
is attached to a class.
export function Repeater(options?: {
heartbeatInterval?: number;
errorCatcher?: ErrorCatcher;
}): ClassDecorator;
@RepeaterTask
is attached to a class method.
export function RepeaterTask(payload?: TaskPayload): PropertyDecorator;
export function RepeaterTask(interval: number, payload?: TaskPayload): PropertyDecorator;
Basic example
@Repeater()
class Test1 {
public counter = 0;
@RepeaterTask()
public increment() {
this.counter++;
}
}
const t = new Test1();
// wait...
console.log(t.counter); // 1
Instance management
// Get an internal repeater instance
const instance = getRepeaterInstance(t);
// Stop repeater internal loop
instance.stop();
// Add a task to multiply a value by 2 every second
let myValue = 1;
instance.addTask('multiply', (factor) => myValue *= factor, 1000, [2]);
// Start repeater internal loop again
instance.start();