Schedule decorator for TypeScript
npm install ts-schedule-decoratorsThe schedule decorators library provides a simple, ES5+ compatible, lightweight and universal decorator to easily make recurrent function calls.
The decorator uses the standard window.setInterval() function internally, makes the code clearer and avoid code duplication.
ts-schedule-decorators as dependency:sh
npm install ts-schedule-decorators --save
`Usage
#### Schedule an instance method
Instance methods will be executed after instantiation.
`ts
@Schedulable()
class Cat { @Interval(1000)
public meow() {
console.log('Meeeooow')
}
}
const garfield = new Cat()
// Displays:
// 2017-01-09 12:12:35 Meeeooow
// 2017-01-09 12:12:36 Meeeooow
// 2017-01-09 12:12:37 Meeeooow
...
`#### Schedule a static method
Static methods will be executed on declaration.
`ts
@Schedulable()
class Cat { @Interval(1000)
public static miaow() {
console.log('Miaaooow')
}
}
// Displays:
// 2017-01-09 12:16:41 Miaaooow
// 2017-01-09 12:16:42 Miaaooow
// 2017-01-09 12:16:43 Miaaooow
...
`#### Allow manual invocation
By default and to be safe, an interval method cannot be invoked manually. However, you can avoid this behavior by setting the
protectOriginal option to false.
`ts
@Schedulable()
class Cat { @Interval(1000)
public static miaow() {
console.log('Miaaooow')
}
}
Cat.miaow()
// Displays:
// Uncaught Error: interval method cannot be invoked
@Schedulable()
class Cat {
@Interval(1000, { protectOriginal: false })
public static miaow() {
console.log('Miaaooow')
}
}
Cat.miaow()
// Displays:
// 2017-01-09 12:55:33 Miaaooow
// 2017-01-09 12:55:34 Miaaooow
// 2017-01-09 12:55:35 Miaaooow
// 2017-01-09 12:55:36 Miaaooow
`#### Execute the method on the leading edge
If the option
leading is set to true, then the method will be invoked on the leading edge as well.
`ts
@Schedulable()
class Cat { @Interval(1000, { leading: true })
public static miaow() {
console.log('Miaaooow')
}
}
// Displays:
// 2017-01-09 12:18:18 Miaaooow
// 2017-01-09 12:18:19 Miaaooow
// 2017-01-09 12:18:20 Miaaooow
// 2017-01-09 12:18:21 Miaaooow
...
`#### Stopping condition
The execution of the method can be stopped providing a function to the
stop option. If the invokation of this function returns true, then the interval is cleared.
`ts
@Schedulable()
class Cat { public static stopIt: boolean = false
@Interval(1000, { stop: self => return self.stopIt })
public static miaow() {
console.log('Miaaooow')
Cat.stopIt = true
}
}
// Displays:
// 2017-01-09 12:18:18 Miaaooow
// 2017-01-09 12:18:19 Miaaooow
// 2017-01-09 12:18:20 Miaaooow
// 2017-01-09 12:18:21 Miaaooow
...
``