Skip to content

Commit ea78a71

Browse files
committed
Abort event listeners when transitioning
1 parent 83233ff commit ea78a71

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

src/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ class InternalInstance {
208208
private parent: null | InternalInstance
209209
private globalHandlers = new Handlers()
210210
private resolved = null as Promise<Record<string, any>> | null
211+
private eventAborter = new AbortController();
211212
child: null | InternalInstance = null
212213

213214
constructor(
@@ -272,14 +273,17 @@ class InternalInstance {
272273

273274
consume(stateGenerator: (() => StateDefinition) | (() => Generator<Yielded, StateDefinition, never>)) {
274275
for (const [event, target] of this.globalHandlers.eventsToListenTo) {
276+
// Not sure if we still need this if we have abort signals, and for what versions of Node/browsers?
275277
target.removeEventListener(event, this);
276278
}
279+
this.eventAborter.abort();
277280

278281
const initialReturn = stateGenerator();
279282

280283
this.willEnter();
281284

282285
this.globalHandlers.reset();
286+
this.eventAborter = new AbortController();
283287

284288
if (initialReturn[Symbol.iterator]) {
285289
const iterator = initialReturn[Symbol.iterator]();
@@ -308,7 +312,7 @@ class InternalInstance {
308312
}
309313

310314
for (const [event, target] of this.globalHandlers.eventsToListenTo) {
311-
target.addEventListener(event, this);
315+
target.addEventListener(event, this, { signal: this.eventAborter.signal });
312316
}
313317

314318
} else if (typeof initialReturn === 'function') {

0 commit comments

Comments
 (0)