Skip to content

Commit 71d41fb

Browse files
committed
fix: clearing a timer inside its callback
fixes #30
1 parent 912bc22 commit 71d41fb

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

lib/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ const timer = (type, clear, fn, ms) => {
124124
countdownStart = Date.now();
125125
nextTime = ms;
126126
fn();
127+
if (done) return;
127128
if (type === setTimeout) {
128129
done = true;
129130
if (typeof finished === 'function') {

test/group-test.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,5 +77,26 @@ describe('Group', () => {
7777
done();
7878
}, 100);
7979
});
80+
81+
describe('Timer inside a callback', () => {
82+
it('Timers are cleared', (done) => {
83+
let called = false;
84+
let a = group.setTimeout(() => {
85+
called = true;
86+
a.clear();
87+
}, 10);
88+
assert.equal(group.timers().length, 5);
89+
mysetTimeout(() => {
90+
assert.ok(called);
91+
assert.equal(group.timers().length, 4);
92+
mysetTimeout(() => {
93+
assert.ok(!a.called);
94+
assert.ok(b.called);
95+
assert.ok(c.called);
96+
}, 300);
97+
done();
98+
}, 10);
99+
});
100+
});
80101
});
81102
});

0 commit comments

Comments
 (0)