-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.mjs
36 lines (27 loc) · 865 Bytes
/
index.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import { EventEmitter } from "events"
import { nextTick } from "process"
const DivisibleBy5Error = new Error("Timestamp divisible by 5.")
function ticker(number, callback) {
const emitter = new EventEmitter()
recursion(number, emitter, 1, callback)
return emitter
}
function recursion(number, emitter, ticks, callback) {
if (Date.now() % 5 === 0) {
nextTick(() => emitter.emit("error", DivisibleBy5Error))
return callback(DivisibleBy5Error, ticks)
}
if (number <= 0) {
return callback(null, ticks)
}
nextTick(() => emitter.emit("tick"))
setTimeout(() => recursion(number - 50, emitter, ticks + 1, callback), 50)
}
ticker(1000, (err, ticks) => {
if (err) {
console.error(err)
}
console.log(`Emitted ${ticks} ${ticks > 1 ? "ticks" : "tick"}.`)
})
.on("tick", () => console.log("Tick"))
.on("error", console.error)