Timeout Manager for control executions
$ npm install timeout-exec
export declare enum TimerType {
timeout = "timeout",
interval = "interval"
}
export declare type SandboxTimerItem = {
id: number;
type: TimerType;
};
export declare type SandboxTimers = Record<string, SandboxTimerItem[]>;
export interface Clear {
clear(): void;
}
export interface Executor extends Clear {
execute(resolve: Function): Clear;
}
export default class Timeout {
private _sandbox;
constructor();
timer(ms: number, key?: string): Executor;
interval(ms: number, key?: string): Executor;
clearKey(key?: string): SandboxTimers;
destroy(): SandboxTimers;
}
// Example 1:
import Timeout from 'timeout-exec';
// Note if use in ES5
// var Timeout = require('timeout-exec').default;
const timeouts = new Timeout();
const run1 = timeouts.timer(1000);
run1.execute(() => (console.log('first run')));
// Console.log: [first run]
const run2 = timeouts
.timer(2000)
.execute(() => (console.log('second run')));
// Console.log: [second run]
// Function will not be called due to clear()
const run3 = timeouts
.timer(3000)
.execute(() => (console.log('third run')));
run3.clear();
// Example 2:
const timeouts = new Timeout();
const run1 = timeouts.timer(2000);
run1.execute(() => (console.log('time run')));
const run2 = timeouts
.interval(1000)
.execute(() => (console.log('interval run')));
setTimeout(() => {
timeouts.destroy();
}, 4000);
// Console.log: [interval run]
// Console.log: [time run]
// Console.log: [interval run]
// Console.log: [interval run]
// Console.log: [interval run]
// --- timeouts destroyed
Returns an instance of execution manager
Return a decorated execute
and clear
for setTimeout
call
Type: number
Milliseconds before timing out.
Type: string|undefined
Default: 'no_name'
Key for store in private sandbox by timeoutId.
You could for example retry:
const timeouts = new Timeout();
const run1 = timeouts.timer(2000, 'SOME_KEY').execute(() => (console.log(new Date())));
const run2 = timeouts.timer(3000, 'SOME_KEY').execute(() => (console.log(new Date())));
timeouts.clearKey('SOME_KEY'); // will clear all timers with 'SOME_KEY' key;
// same as
run1.clear();
run2.clear();
Return a decorated execute
and clear
for setIterval
call
You could for example retry:
const timeouts = new Timeout();
const timer1 = timeouts.timer(5000, 'SOME_KEY').execute(() => (console.log(new Date())));
const interval1 = timeouts.interval(2000, 'SOME_KEY').execute(() => (console.log(new Date())));
const interval2 = timeouts.interval(3000, 'SOME_KEY').execute(() => (console.log(new Date())));
timeouts.clearKey('SOME_KEY'); // will clear all timers and intervals with 'SOME_KEY' key;
// same as
timer1.clear();
interval1.clear();
interval2.clear();
Clear all executions with specified key
Type: string|undefined
Default: 'no_name'
Clear all executions within instance
You could for example retry:
const timeouts = new Timeout();
const key1 = timeouts.timer(5000, 'KEY1').execute(() => (console.log(new Date())));
const key_empty = timeouts.interval(2000).execute(() => (console.log(new Date())));
const key2 = timeouts.interval(3000, 'KEY2').execute(() => (console.log(new Date())));
timeouts.destroy(); // will clear all timers and intervals for all keys
// same as
key1.clear();
key_empty.clear();
key2.clear();