everytime.js
v0.1.3
Published
Schedule async functions to run repeatedly
Downloads
3
Readme
everytime.js - Schedule async functions
TLDR
every.other.day.at("12:00").do(async () => console.log("Hello"))
everytime.js is a library that helps you schedule functions to run repeatedly. Also available in Python.
Full Example
import { every } from "everytime.js"
async function greet() {
console.log("Hello")
}
every(5).days.do(greet)
Install
everytime.js can be installed from npmjs with
npm i everytime.js
How to schedule functions
do()
Normally, you will use the do
-function to schedule functions.
every(5).seconds.do(greet)
schedule
You can wrap the everytime expression into a call to schedule
.
schedule(every.day.at("12:00"))(greet)
This allows you to pass custom datetime iterables to schedule
(see Schedule custom times).
Schedule custom times
schedule
accepts datetime iterables. The following schedule works:
schedule([dayjs(), dayjs().add(1, "day")])
Decorators
Keep in mind that Decorators are an experimental feature and may be subject to change.
Decorators only work for methods and not for free functions. Therefore you have to wrap functions in a class to use the run
decorator.
class C {
@run(every.second)
static f() {
console.log("hello")
}
}
Supported Expressions
Quantification
Every time unit can be quantified by every
, every.other
or every(n)
:
every.second
every.other.second
every(5).seconds
Supported time units
The supported time units are
millisecond
second
minute
hour
day
week
Modifier functions
All everytime expressions are datetime iterables of type Iterable<Dayjs>
.
To change the scheduling, modify these enumerations with the following functions.
filter
every.hour.filter((datetime: Dayjs) => datetime.hour() < 10).do(greet)
will schedule the function hourly, but only betweeen 0:00 and 9:59.
map
every.hour.map((datetime: Dayjs) => datetime.startOf("hour"))
will schedule the function hourly, but ensures that the function will run at the start of the hour at minute 0.
take
every.day.at("12:00").take(10).do(greet)
will schedule the function daily at 12:00 for the next 10 days (and then terminate).
Specific time of the day
day
can be scheduled for a specific time of the day:
every.day.at("12:15")
(Note that hour
is 24-hour based)
How it works
everytime.js uses setTimeout
to schedule functions and the Day.js library to calculate time differences.
Normally, the process will run forever (because expressions like every.day
describe infinitely many datetimes). If you use a finite custom iterable with schedule
, the process will terminate accordingly.